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。
在编程语言中,通常以 x
、0x
或 &h
开头的数字(取决于语言)表示一个十六进制数。可以忽略前导零,就像十进制数一样。尾随零有其明显的含义。
十六进制转十进制
那么,如何将十六进制数转换为十进制数?每个数字应乘以 16 的幂,而不是十进制的 10 的幂。有一个简单的通用公式可以从任何 base-X 转换为任何 base-Y,但这里它适用于从 base-16 转换为 base-10。
- 取每个十六进制数字,写下它的十进制版本
- 将每个数字乘以
16^pos
,其中pos == position in hex number,最右边的位置为零 - 添加结果
数字 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/