【问题标题】:String to Int Conversion in ArduinoArduino中的字符串到整数转换
【发布时间】:2018-10-01 09:11:41
【问题描述】:

我正在尝试在 arduino 中将字符串转换为 int(如 Java 中的 Integer.parseInt()),以便对数字进行一些操作。不幸的是,我的解决方案都没有奏效。 直到现在我都试过了:

创建char数组并调用atoi函数:

String StringPassword;

uint8_t *hash;
//Here I define hash

int j;
for (j = 0; j < 20; ++j) {
 StringPassword.concat(hash[j]);
}

 //Checking String Size
 Serial.println("Size");
 //Checking String
 Serial.println(StringPassword.length());
Serial.println(StringPassword);

int jj;
char PasswordCharArray[StringPassword.length()];
 StringPassword.toCharArray(PasswordCharArray, StringPassword.length());

awa = atoi(PasswordCharArray);  
Serial.println(awa);

输出:

尺寸 48

168179819314217391617011617743249832108225513297

18209

为空终止字符串创建char数组并调用atoi函数:

 String StringPassword;

 uint8_t *hash;
 //Here I define hash

int j;
for (j = 0; j < 20; ++j) {
 StringPassword.concat(hash[j]);
}

 //Checking String Size
 Serial.println("Size");
 //Checking String
 Serial.println(StringPassword.length());
Serial.println(StringPassword);

int jj;
char PasswordCharArray[StringPassword.length()+1];
 StringPassword.toCharArray(PasswordCharArray,StringPassword.length()+1);

awa = atoi(PasswordCharArray);  
Serial.println(awa);

输出:

尺寸

48

168179819314217391617011617743249832108225513297

-14511

使用 toInt 函数:

 String StringPassword;

  uint8_t *hash;
 //Here I define hash

int j;
 for (j = 0; j < 20; ++j) {
   StringPassword.concat(hash[j]);
 }

 //Checking String Size
 Serial.println("Size");
 //Checking String
  Serial.println(StringPassword.length());
Serial.println(StringPassword);

awa = StringPassword.toInt();
Serial.println(awa);

输出:

尺寸

48

168179819314217391617011617743249832108225513297

-14511

将String更改为Int的正确方法是什么:

awa = 168179819314217391617011617743249832108225513297 ?

有人可以向我解释为什么我的解决方案不起作用吗?我尝试使用 Stackoverflow 和 Arduino 论坛上提到的函数来解决这个问题。

【问题讨论】:

  • Java 也无法转换这么大的数字。

标签: string arduino char int


【解决方案1】:

数字 168179819314217391617011617743249832108225513297 达到最大整数值限制,因此不会转换为整数。

尝试使用atol() 而不是atoi()。长数字可以容纳更多数据,如上图所示。

【讨论】:

  • 即使是 128 位整数也无法容纳该数字。
  • 感谢您的回复。我尝试使用 atol() 和 long 而不是 int 但它仍然不起作用。它给了我-970930351。
  • 最后我需要这个值就是将它的大小减小 awa % 1000000;并与服务器端(php)生成的哈希值进行比较,并通过 $ReadyPassword = (int)$awa % 1000000;现在我不会使用整个哈希值,而是在两边取相同的部分:服务器和 arduino 从中制作 6 位密码。无论如何,谢谢你的回复,否则我仍然会试图弄清楚为什么它不起作用。
  • @TheBezwet 你为什么接受这个答案?它没有解决你的问题。您为什么要尝试将散列转换为整数?我想你有一个XY problem
  • @TheBezwet 用您自己的解决方案发布答案​​并接受它会更有意义。接受答案作为感谢会适得其反。这就是投票的目的。
猜你喜欢
  • 1970-01-01
  • 2015-05-15
  • 2023-02-10
  • 1970-01-01
  • 2017-10-16
  • 2015-08-10
  • 2014-02-20
  • 2021-08-15
相关资源
最近更新 更多