字符串元素取值与两位数相加取值
Taking value from string element and addition taken value with double-digit number
我想从字符串中取值,然后与两位数相加取值:
uint8_t buff[] = "Test123";
uint8_t result = 0;
result = buff[5] + 12;
如果我尝试用个位数(0,1,2,..,9) 加取值,一切正常,但如果我想用两位数(10,11, 12,13,...,99) 我得到了结果 ASCII 码。我该如何解决这个问题?铸造不值得。
我期望结果为 14,但我得到了 62。因此程序将字符串的 ASCII 值与 12 相加,但我想将 buff[5] 的整数值与 12 相加,我希望这个结果 = 12 + 2 = 14
你得到 62
的原因是你添加了 ASCII 字符的十进制值 2
而不是它的整数表示。
要将字符转换为整数,我们必须改为这样做
result = (buf[5] - '0') + 12; /* first way */
result = ((uint8_t)(buf[5] & 0x0F)) + 12; /* second way */
第一种方式:字符2
的ASCII十进制值为50
,字符0
的ASCII十进制值为48
=>'2' - '0' = 2
第二种方式:0
到9
的字符的十六进制值为[0x30, 0x31, ..., 0x39]
。我们可以看到第一个半字节对应于字符的整数表示,这意味着我们可以关闭其十六进制值的高位半字节。
我想从字符串中取值,然后与两位数相加取值:
uint8_t buff[] = "Test123";
uint8_t result = 0;
result = buff[5] + 12;
如果我尝试用个位数(0,1,2,..,9) 加取值,一切正常,但如果我想用两位数(10,11, 12,13,...,99) 我得到了结果 ASCII 码。我该如何解决这个问题?铸造不值得。
我期望结果为 14,但我得到了 62。因此程序将字符串的 ASCII 值与 12 相加,但我想将 buff[5] 的整数值与 12 相加,我希望这个结果 = 12 + 2 = 14
你得到 62
的原因是你添加了 ASCII 字符的十进制值 2
而不是它的整数表示。
要将字符转换为整数,我们必须改为这样做
result = (buf[5] - '0') + 12; /* first way */
result = ((uint8_t)(buf[5] & 0x0F)) + 12; /* second way */
第一种方式:字符2
的ASCII十进制值为50
,字符0
的ASCII十进制值为48
=>'2' - '0' = 2
第二种方式:0
到9
的字符的十六进制值为[0x30, 0x31, ..., 0x39]
。我们可以看到第一个半字节对应于字符的整数表示,这意味着我们可以关闭其十六进制值的高位半字节。