【发布时间】:2010-10-23 14:23:12
【问题描述】:
我有 3 种正整数的基本表示:
- 十进制,在 unsigned long 变量中(例如 unsigned long int NumDec = 200)。
- 十六进制,在字符串变量中(例如 string NumHex = "C8")
- 二进制,在字符串变量中(例如string NumBin = "11001000")
我希望能够以最有效的方式在所有 3 种表示形式中的数字之间进行转换。 IE。实现以下6个功能:
unsigned long int Binary2Dec(const string & Bin) {}
unsigned long int Hex2Dec(const string & Hex) {}
string Dec2Hex(unsigned long int Dec) {}
string Binary2Hex(const string & Bin) {}
string Dec2Binary(unsigned long int Dec) {}
string Hex2Binary(const string & Hex) {}
对他们每个人来说最有效的方法是什么?我可以使用 C 和 C++,但不能使用 boost。
编辑:“效率”是指时间效率:最短的执行时间。
【问题讨论】:
-
您的前两个函数名称极具误导性。您没有返回十进制表示。您将返回一个无符号长整数,具有未定义、不透明(除非您执行实现定义的操作)的内部表示。
-
您建议的函数名称是什么?
-
Binary2Int 和 Hex2Int 更有意义。当然这些函数在 c 库中使用 strtol 是不需要的。
-
Binary2ULong 和 HexToULong 会好很多。
-
@IgorOks:令人困惑的原因是数字数据类型没有基数,因此不是“基数 10”。