Arduino:从两个十进制字符串中获取十六进制值

时间:2016-08-03 11:30:08

标签: c++ arduino type-conversion

我想做转换,但不知道如何。

最初我得到像03 EE这样代表1006的十六进制值。 现在这些数据表示在一个String数组中,并以小数表示:

[0] = "3"
[1] = "238"

从这种情况开始,回到小数1006的最简单方法是什么?

我在带有C ++的Arduino上执行此操作

2 个答案:

答案 0 :(得分:1)

这样的事情应该这样做:

const char* s[] = {"3", "238"};

int result = (std::stoi(std::string(s[0])) << 8)
          + std::stoi(std::string(s[1]));
std::cout << result;

请注意,我使用std::stoi,如果您不喜欢,请参阅:Convert string to int C++了解更多转化可能性

live example

答案 1 :(得分:0)

由于Arduino String无法处理十六进制表示,您应该手动或使用其他库(例如,如果可能的话,使用标准C库中的sprintf)。这是一种手动方式:

int decBytesToInt(const String &msByte, const String &lsByte)
{
    int res = 0;
    res |= (msByte.toInt() & 0xFF) << 8;
    res |= (lsByte.toInt() & 0xFF);
}

msBytelsByte相应地是最重要且最不重要的字节十进制表示。

假设int当然是16位。