计算十六进制数字中的位数

时间:2011-10-20 09:50:28

标签: c++ visual-c++ mfc hex

我正在尝试计算十六进制数中可用的位数。例如:0x00000001应将计数返回为8

有谁能建议最有效的方法是什么?我尝试将其转换为CString并使用“GetLength()”获取长度,但这似乎不起作用。

编辑:很抱歉,如果我忘记提及,我存储十六进制数的变量是无符号短。

试过这个:

unsigned short number;
CString HexValue;
HexValue.Format("%.8x",number);     // number = 0000000000000000, 16 0's
HexValue = "0x" + HexValue;
int length = HexValue.GetLength() - 2; // returns an 8 here

4 个答案:

答案 0 :(得分:4)

由于每个字节包含两个十六进制数字,请尝试使用整数类型的变量n

sizeof(n)*CHAR_BIT/4

答案 1 :(得分:3)

如果 0x00000001 是一个字符串,那么GetLength() - 2应该给出8.如果它是一个以不同类型存储的值(比如说int),那么只需记住十六进制编码这一事实每8位需要2个字符来编码整个值范围(sizeof(int) * 2

答案 2 :(得分:1)

每4位有一个十六进制数字。

std::cout << sizeof(unsigned short) * CHAR_BIT / 4 << "\n";
std::cout << sizeof(unsigned short) * CHAR_BIS % 4 << " LEFTOVER PARTIAL DIGITS\n";

答案 3 :(得分:0)

十六进制数 n 中的位数是max(1,ceil(log2( n )))。有关计算log2的快速算法,请参阅Wikipedia, Binary logarithm

但是,0x00000001不会为您提供值8,因为实际上只需要数字来表示该数字。 0x000000010x1之间的差异仅是显示问题。