c++ - 如何解释像 0x0A 这样的十六进制数?

标签 c++ syntax hex

0x0A 在 C++ 中是什么意思,我应该如何解释或读取这样的十六进制值?

if (version < 760 || version > 760){
    disconnectClient(0x0A, STRING_CLIENT_VERSION);
}

uint32_t accnumber = msg.GetU32();
std::string password = msg.GetString();

if(!accnumber){
    disconnectClient(0x0A, "You must enter your account number.");
    return false;
}

最佳答案

如前所述,0x0A 等于十进制 10(十)。这等同于 LF(换行)的 ASCII 码,它在许多系统上是换行符。但在你的情况下,你使用 DisconnectClient ,它需要一个 ULONG。您是传递 0xA 还是只传递 10 都没有关系。

在这种情况下,此数字的含义客户端连接的接口(interface)

编辑:再次查看您的代码,您的 disconnectClient 函数与 MSDN 上的不同。如果它是用户定义的方法,找出 0x0A 的含义需要检查该方法本身或其文档(尽管它可能只是“真实的”DisconnectClient 的 stub ,并简单地传递参数)。

理解十六进制

编辑:如果您想知道这里的所有回答者如何知道十六进制 0x0A 等于十进制 10,请继续阅读:

十六进制数以 16 为底(hexa = 6,deca = 10)。我们现在习惯以 10 为基数,但历史表明,甚至在二进制(以 2 为基数)数字变得普遍之前,就已经使用了以 20 为基数(法国仍然有 quatre-vingt)、5 进制数(俄罗斯)和其他基数对于电脑。 Base-16 与 Base-10 一样,但现在您没有 10 根手指,而是 16 根手指。

计算机只能用位来思考,四位(一个半字节)可以组成 0-15 的数字。为了更容易读写位,使用了十六进制表示法。这会将 A-F 添加到普遍存在的数字 0-9,其中 A 等于 10,B 等于 11,直到 F 等于 15。

在编程语言中,通常以 x0x&h 开头的数字(取决于语言)表示一个十六进制数。可以忽略前导零,就像十进制数一样。尾随零有其明显的含义。

十六进制转十进制

那么,如何将十六进制数转换为十进制数?每个数字应乘以 16 的幂,而不是十进制的 10 的幂。有一个简单的通用公式可以从任何 base-X 转换为任何 base-Y,但这里它适用于从 base-16 转换为 base-10。

  1. 取每个十六进制数字,写下它的十进制版本
  2. 将每个数字乘以16^pos,其中pos == position in hex number,最右边的位置为零
  3. 添加结果

数字 0x8B20 变为:

8 * 16^3 = 8  * 4096 = 32768
B * 16^2 = 11 * 256  =  2816
2 * 16^1 = 2  * 16   =    32
0 * 16^0 = 0  * 1    =     0 
                     -------  +
                       35616

手工操作相当乏味,但我希望您能理解。如果您使用的是 Windows,请在运行窗口或搜索框(Vista、W7)中键入 Calc,然后单击查看 > 科学。现在您可以输入十六进制数(按 F5)并在十进制 (F6)、八进制 (F7) 和二进制 (F8) 之间切换。

关于数字及其底数还有很多要说的,但如果您需要更多,我建议您看一下 math forum faq , 或 Wikipedia (more general) .要在多个碱基之间转换,请尝试 this online base-X calculator .

更新:添加了关于理解和转换十六进制数的部分,认为它可能适用;-)

关于c++ - 如何解释像 0x0A 这样的十六进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1734333/

相关文章:

assembly - 了解汇编语言操作数形式

c++ - 不使用 boost::asio::ip::tcp::socket 调用移动构造函数

c++ - 如何在 Windows XP 上获得比计时器滴答声(15 毫秒)更准确的时间?

syntax - Hive:将列标题写入本地文件?

Python:采用三个参数的部分

c - 十六进制到字符的转换和转储输出

objective-c - 将十六进制字符串转换为长

c++ - 可以在堆上创建的对象在 C++ 中被视为 'being on stack' 吗?

c++ - 为什么 std::equal 比两个小 std::array 的手卷循环慢得多?

azure - 从 Terraform 中的 map 列表中输出特定值