我是Arduino的新手,我想做的就是将二进制数字串解析为精确的整数表示。
char* byte1 = "11111111"
int binary1 = atoi(byte1);
Serial.print(binary1);
然而这打印出:-19961
任何人都可以解释原因吗?我来自Java和JavaScript的观点。
答案 0 :(得分:1)
atoi
将十进制(基数为10)的字符串转换为int。如果要将二进制字符串转换为int,可以使用strtol
:
char *byte1 = "11111111";
int val1 = strtol(byte1, 0, 2);
std::cout << val1 << std::endl;
strtol
可以转换任何基础 - 第三个参数是要使用的基础。
答案 1 :(得分:-1)
你得到-19961因为在Arduino int
是16位宽并且不能容纳任何大于32767的数字。要保持11111111的整数表示,你必须使用long
(在Arduino上是32位)和strtol
。
long val = strtol(byte1, NULL, 10);