将8位char数组解析为整数

时间:2017-11-12 23:58:46

标签: arduino

我是Arduino的新手,我想做的就是将二进制数字串解析为精确的整数表示。

char* byte1 = "11111111"
int binary1 = atoi(byte1);
Serial.print(binary1);

然而这打印出:-19961

任何人都可以解释原因吗?我来自Java和JavaScript的观点。

2 个答案:

答案 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);