我正在开发一个连接多个字符串的程序,然后以十六进制添加它们的所有值。 当我尝试将字符串转换为 int(例如 string1)时,它似乎无法正常工作。 当我运行代码并将 string1 打印到串行监视器时,我得到的是“0”而不是我期望的“11”。
void setup() {
Serial.begin(9600);
// these are hexadecimal values
String string0 = "06";
String string1 = "000B";
String string2 = "00FE";
// add the individual hex values of string0, string1, string2
int checkSum0 = string0.toInt(); // this will be in decimal form, right?
int checkSum1 = string1.toInt(); // this too?
int checkSum2 = string2.toInt(); // this too?
int checkSumTotal = checkSum0 + checkSum1 + checkSum2;
// convert checkSumTotal to hexadecimal
Serial.println(checkSum1); // prints 0 when I run the code
}
toInt()函数只能将字符串转为十进制整数,对十六进制数无效。您可以使用名为 strtol() 的库函数,该函数可用于根据从 2 到 36 的给定基数将字符串转换为整数。我已经使用 strtol() 对十六进制数修改了您的代码,如下所示:
void setup() {
Serial.begin(9600);
// these are hexadecimal values
String string0 = "06";
String string1 = "000B";
String string2 = "00FE";
// add the individual hex values of string0, string1, string2
int checkSum0 = strtol(string0.c_str(), NULL, 16); //modified code
int checkSum1 = strtol(string1.c_str(), NULL, 16); //modified code
int checkSum2 = strtol(string2.c_str(), NULL, 16); //modified code
int checkSumTotal = checkSum0 + checkSum1 + checkSum2;
// convert checkSumTotal to hexadecimal
Serial.println(checkSum1);
}
希望有帮助! :D