将字符串转换为十六进制值[C++]

问题描述 投票:0回答:1

我正在开发一个连接多个字符串的程序,然后以十六进制添加它们的所有值。 当我尝试将字符串转换为 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

}
string char hex
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.