计算十六进制数的位数

发布于 2024-12-11 11:56:17 字数 479 浏览 0 评论 0原文

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

I am trying to count the number of digits that are available in a hexadecimal number. For example: 0x00000001 should return the count as 8.

Could anyone suggest as to what is the most efficient way of doing this? I have tried converting it to a CString and get the length using 'GetLength()' but that doesn't seem to work here.

Edit: Sorry if I forgot to mentioned, my variable that stores the hexadecimal number is an unsigned short.

Tried this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

记忆之渊 2024-12-18 11:56:17

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

sizeof(n)*CHAR_BIT/4

Since each byte contains two hexadecimal digits, try for a variable nof integral type

sizeof(n)*CHAR_BIT/4
ゝ杯具 2024-12-18 11:56:17

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

If 0x00000001 is a string then GetLength() - 2 should give 8. If it is a value stored in a different type (lets say int), then just simply remember the fact that hex encoding needs 2 characters per 8 bits to encode the whole value range (sizeof(int) * 2)

骷髅 2024-12-18 11:56:17

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

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

There is one hex digit per 4 bits.

std::cout << sizeof(unsigned short) * CHAR_BIT / 4 << "\n";
std::cout << sizeof(unsigned short) * CHAR_BIS % 4 << " LEFTOVER PARTIAL DIGITS\n";
給妳壹絲溫柔 2024-12-18 11:56:17

十六进制数 n 中的位数为 max(1, ceil(log2(n)))。请参阅维基百科,二进制对数,了解计算 log2 的快速算法。

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

The number of digits in a hexadecimal number n is max(1, ceil(log2(n))). See Wikipedia, Binary logarithm for a fast algorithm to compute log2.

That won't give you the value 8 for 0x00000001, though, since there's actually only digit needed to represent that number. The difference between 0x00000001 and 0x1 is a display issue only.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文