[] 运算符中的十六进制
Hexadecimal in [] operator
我找到了一些文章,我看到了这个:
// Capture vendor string
char vendor[0x20];
memset(vendor, 0, sizeof(vendor));
*reinterpret_cast<int*>(vendor) = data_[0][1];
*reinterpret_cast<int*>(vendor + 4) = data_[0][3];
*reinterpret_cast<int*>(vendor + 8) = data_[0][2];
这一行:char vendor[0x20];
。
为什么三个是十六进制,我可以使用八进制值吗?
Why threre are hexadecimal
因为作者选择使用十六进制。如您所见,0x20 在十六进制中非常“圆”,因为它只有一个非零数字。
may I use octal value?
是的。在任何可以使用整数文字的地方,您都可以使用任何可用的基本表示形式。二进制、十进制、八进制、十六进制可选
P.S。该示例在标准 C++ 中在技术上是错误的,因为它无法对齐缓冲区,因此它不是学习该语言的好示例。我看起来虽然它是专门为 x86 处理器编写的,它可以处理未对齐的操作。
正确的写法是使用整数数组,复制值,然后在读取时将结果重新解释为字符。
我找到了一些文章,我看到了这个:
// Capture vendor string
char vendor[0x20];
memset(vendor, 0, sizeof(vendor));
*reinterpret_cast<int*>(vendor) = data_[0][1];
*reinterpret_cast<int*>(vendor + 4) = data_[0][3];
*reinterpret_cast<int*>(vendor + 8) = data_[0][2];
这一行:char vendor[0x20];
。
为什么三个是十六进制,我可以使用八进制值吗?
Why threre are hexadecimal
因为作者选择使用十六进制。如您所见,0x20 在十六进制中非常“圆”,因为它只有一个非零数字。
may I use octal value?
是的。在任何可以使用整数文字的地方,您都可以使用任何可用的基本表示形式。二进制、十进制、八进制、十六进制可选
P.S。该示例在标准 C++ 中在技术上是错误的,因为它无法对齐缓冲区,因此它不是学习该语言的好示例。我看起来虽然它是专门为 x86 处理器编写的,它可以处理未对齐的操作。
正确的写法是使用整数数组,复制值,然后在读取时将结果重新解释为字符。