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

时间:2009-11-14 14:11:54

标签: 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;
}

7 个答案:

答案 0 :(得分:28)

如前所述,0x0A等于十进制10(十)。这等于LF(换行)的ASCII码,这是许多系统上的换行符。但在您的情况下,您使用DisconnectClient,其中ULONG。您是通过0xA还是10无关紧要。

此编号的含义,在这种情况下,是客户端连接的接口

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

了解十六进制

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

十六进制数是base-16(hexa = 6,deca = 10)。我们现在习惯于基数10,但历史表明,基数为20(法国仍然有quatre-vingt),基数为5(俄罗斯),其他人甚至在二元(基数为2)的数字变得普遍之前就被使用了用于电脑。 Base-16就像10-base一样,但现在你没有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 ==位置以十六进制数表示,最右边的位置为零
  3. 添加结果
  4. 数字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,然后单击查看&gt;科学。现在你可以输入十六进制数字(点击F5)并在十进制(F6),八进制(F7)和二进制(F8)之间切换。

    关于数字及其基数还有很多话要说,但如果您需要更多,我建议您查看math forum faqWikipedia (more general)。要在多个基数之间进行转换,请尝试this online base-X calculator

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

答案 1 :(得分:13)

0x是十六进制表示法的前缀。 0x0A是十六进制数A,十进制表示法为10。

答案 2 :(得分:4)

我怀疑它是一个状态代码,作为正在使用的协议的一部分被发送回客户端。通常,设置的每个位都代表一些标志。在这种情况下,设置的标志是对应于(低)2&amp;的标志。 3位(从零开始计数)。处理此问题的更好方法是将标志定义为宏,然后简单地使用它们(ORing以获得组合)。

 #define REQUEST_FAILURE 0x02
 #define LOGIN_FAILURE 0x08

然后

 disconnectClient( REQUEST_FAILURE | LOGIN_FAILURE,
                   "You must enter your account number." );

答案 3 :(得分:3)

这是十六进制数0A。十进制,为10;在二进制文件中,00001010。

答案 4 :(得分:3)

这是十六进制数,0x0A与十进制数10相同。

在这种情况下,它只是一些编号。

答案 5 :(得分:1)

这是十六进制中的数字10。代表各种代码的数字通常以十六进制给出,以便您可以“查看位”。例如,十六进制中的相同数字,但添加了16位,将为0x1A。加上256位,它将是0x11A。在十进制中,这将是256 + 16 + 10 = 282,更难以看到哪些位开启。

答案 6 :(得分:0)

这是十六进制格式的数字文字。 0x前缀表示十六进制。