Nid*_* MS 8 c if-statement char
我试图比较字符串的第一个字符和十六进制常量来确定数据的类型.但每次失败.任何人都可以解释为什
char charray[] = {0xAA, 0x00, 0x02};
char ch = charray[0];
if (0xAA == ch)
{
printf("Equal\n");
}
Run Code Online (Sandbox Code Playgroud)
Lun*_*din 10
问题出在这里:
char charray[] = {0xAA, 0x00, 0x02};
Run Code Online (Sandbox Code Playgroud)
char类型具有实现定义的签名,这意味着在某些系统上它将等同于signed char.A signed char只能存储高达0x7F的值,MSB将被视为符号位.这是你的情况下发生的事情,0xAA被转换为有符号的值-86(它是实现定义的,它得到的值是什么,我假设是两个补码).
然后该符号将保留在表达式中0xAA == ch,因为ch然后将其提升为类型int并保留符号.这意味着你实际上将比较0xAA == -86哪个是假的.
为了避免这样的错误,总是uint8_t在字节级别上进行任何形式的算术时使用.
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |