计算十六进制数的位数
Count the number of digits in a hexadecimal number
我正在尝试计算十六进制数中可用的位数。例如: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,但是,因为实际上只需要一个数字来表示这个数字。0x00000001
和0x1
之间的差异只是显示问题。
相关文章:
- 将字符串转换为十六进制数组c++
- 如何使系统在十六进制数之前打印 0x,在八进制数之前打印 0?
- 如何从存储在 QByteArray 中的十六进制值计算校验和
- 将大十六进制数转换为十进制形式(以 10 为基数的形式)的算法
- 为什么将字符串输出到未命名的 std::ofstream 反而给了我一个十六进制数?
- 使用无符号字符数组输入十六进制数
- 将十六进制数作为主要函数参数
- 钻头和转移操作数以清除选定的十六进制数
- 在C/C++中将十六进制数组作为字符串写入文件
- 十六进制数组 cout 到文本文件失败
- 将十六进制数转换为布尔数组
- 在 C++,(C) 中更改十六进制数的前导零位
- 将十六进制数的 char[] 转换为对应于 ASCII 表中十六进制数字的字母的 char[] 并反转
- 如何获取十六进制数的最后 n 位数字
- 将char数组转换为十六进制数组(C++)
- 从几个十进制数中绘制一个十六进制数
- 如何使用十六进制数初始化字符数组
- 从十六进制数组读取 Int
- 从十六进制数组读取双精度到向量
- 计算十六进制数的位数