在 C++ 中,十六进制、十进制和八进制是表示整数的三种常用进制,它们在代码中的表示形式不同
一、问题描述
在代码中,错用 报文接受的 0600 来代表 十六进制。实则0600 代表的是八进制。
//报文:68 15 00 03 00 01 80 8A E6 68 63 27 E7 68 11 01 06 00 01 00 00 00 64 00
//dev_id 表示接受到 11 01 06 00
void get_id()
{if((dev_id & 0xffff) = 0600 ) //错误{printf("获取成功 ! \n");}else{printf("获取失败 ! \n");}
}
二、代码改正
//报文:68 15 00 03 00 01 80 8A E6 68 63 27 E7 68 11 01 06 00 01 00 00 00 64 00
//dev_id 表示接受到 11 01 06 00
void get_id()
{if((dev_id & 0xffff) = 0x0600 ) //错误{printf("获取成功 ! \n");}else{printf("获取失败 ! \n");}
}
三、表示方法
C++ 通过前缀区分不同进制的整数常量:
-
十进制(Decimal)
无前缀,由数字 0-9 组成(不能以 0 开头,除非表示 0 本身)。
示例:42、100、-7。 -
八进制(Octal)
以 0 为前缀,由数字 0-7 组成。
示例:052(对应十进制 42)、0144(对应十进制 100)。
- 十六进制(Hexadecimal)
以 0x 或 0X 为前缀,由数字 0-9 和字母 a-f(或 A-F,大小写不敏感)组成。
示例:0x2A(对应十进制 42)、0x64(对应十进制 100)、0XFF(对应十进制 255)。