计算十六进制数的位数

Count the number of digits in a hexadecimal number

本文关键字:十六进制数 计算      更新时间:2023-10-16

我正在尝试计算十六进制数中可用的位数。例如: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

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

sizeof(n)*CHAR_BIT/4

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

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

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

十六进制数n的位数为max(1, ceil(log2(n)))。参见维基百科,二进制对数,关于计算log2的快速算法。

这不会给你0x00000001的值8,但是,因为实际上只需要一个数字来表示这个数字。0x000000010x1之间的差异只是显示问题。