我正在尝试计算十六进制数中可用的位数。例如: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
答案 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,因为实际上只需要数字来表示该数字。 0x00000001
和0x1
之间的差异仅是显示问题。