Arduino中如何将十六进制字符串高效转换为字节?
Arduino十六进制字符串转byte的简洁方案
要把"CE"这类十六进制字符串转换成对应byte值(比如0xCE即206),直接用strtol()函数一行就能解决:
String inString = "CE"; byte outByte = static_cast<byte>(strtol(inString.c_str(), nullptr, 16));
为什么之前的方法失效?
String.toInt()默认按十进制解析,"CE"不是合法十进制数,所以返回0;- 拼接"0x"前缀后再用
toInt()也没用,因为Arduino的toInt()不识别十六进制前缀,遇到非数字字符就停止解析,结果还是0。
之前的尝试及输出
原始尝试代码
String inString = "CE"; byte outByte; outByte = inString.toInt(); printData("outByte: " + String(outByte), serialchan);
输出:
outByte: 0
其他尝试代码
String inString = "CE"; byte outByte; char tempchar[2]; String tempstring; inString.toCharArray(tempchar, 4); // 用4才生效,2不行 printData("inString: " + String(inString), serialchan); printData("inString hex: " + String(tempchar), serialchan); tempstring = "0x" + String(inString); printData("inString in string hex: " + String(tempstring), serialchan); outByte = (byte)tempstring.toInt(); printData("outByte: " + String(outByte), serialchan);
输出:
outByte: 0 inString: CE inString hex: CE inString in string hex: 0xCE outByte: 0
内容的提问来源于stack exchange,提问作者Bob Dole
相关产品推荐
相关产品推荐

