【问题标题】:Arduino char array to integer valueArduino char数组到整数值
【发布时间】:2019-06-20 19:46:01
【问题描述】:

这里的愚蠢问题:

我正在尝试将 char 数组转换为整数。 这是我的情况(从主代码中提取,我已经简单化了..):

int val;
char *buff;
uint8_t v1 = 2;
uint8_t v2 = 25;

buff[0] = v1;
buff[1] = v2;
val = strtol(buff, NULL, 16);

在这种情况下,val 总是返回“0”,但如果我将“buff”替换为“0x225”,它会返回预期值 549。

我做错了什么? 提前谢谢..

【问题讨论】:

  • 从您的 cmets 看来,您正在按原样接收数字,没有文本表示 (ascii)。如果是这样,那么您不需要 strtol(),而只需加入 uint8_t 值即可获得结果。对于小端处理器:val = (v2

标签: c++ arrays arduino char hex


【解决方案1】:

您需要学习 C(实际上是 C++,因为 arduino 是用 C++ 编程的)。

strtol 将字符串转换为数字。

C 中的字符串是一个以零结尾的 char 元素数组(不是'0',而是0)。所以“0x225”是{'0', 'x', '2', '2', '5', 0}的数组

'2' 不是数字2。它是 char '2' 的 ASCII 表示形式,十进制为 50。

buff[0] = '0';
buff[1] = 'x';
buff[2] = '2';
buff[3] = '2';
buff[4] = '5';
buff[5] = 0;

val = strtol(buff, NULL, 16);


buff[0] = 48;
buff[1] = 120;
buff[2] = 50;
buff[3] = 50;
buff[4] = 53;
buff[5] = 0;

val = strtol(buff, NULL, 16);

您的代码还有许多其他问题。您需要了解 25 和 0x25 是什么(它们不相等)。你应该从书本和 PC 编译器开始,从最基础的东西开始学习语言。

【讨论】:

  • 问题是我从串行接收到一组像上面描述的值。我知道 '2' 与 2 不同,但在我的情况下,我收到的是数字 2,我必须连接以获得十六进制数字
  • 伙计,我们会误会的。就像我说的,我从一个非常大的代码中提取了这部分代码,我从序列中获得的是这种情况:[159922] Packet: 19 0 0 20 0 0 21 3 22 66 53 23 0 63 24 30 25 10 136 26 10 136 34 2 35 1 在一定的逻辑下,一些数字是 ID 或数据值。数据值是一个或两个字节 uint_8,在连接时表示一个十六进制值。希望我已经澄清了我的第一个问题。问候
  • @Danny89530 "Man" : uint8_t v1 = 2; uint8_t v2 = 25; buff[0] = v1; buff[1] = v2; val = strtol(buff, NULL, 16); 听从我的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 2013-06-02
  • 2020-03-31
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多