C ++-将Char数组转换为十六进制

时间:2019-01-14 15:00:13

标签: c++ arrays c++11 arduino arduino-uno

我正在使用Arduino进行学校项目,我以前没有使用C++的经验,我想为每个芯片生成唯一的MAC Address。现在,我已经构建了一个函数,该函数创建一个包含唯一char的二维MAC数组。它返回如下内容:

// 2D char array example:
char mac[6][2] = {{'A', 'B'}, {'4', 'D'}, {'F', '5'}, {'C', '9'}, {'B', '7'}, {'F', '2'}};

我想将其转换为如下形式:

// Hex array example:
byte mac[6] = {0xAB, 0x4D, 0xF5, 0xC9, 0xB7, 0xF2};

重要说明:Arduino不支持STL,因此我需要一个不使用它的实现。

如何获得此结果?

  

这不是this question的副本。

1 个答案:

答案 0 :(得分:2)

byte HexCharToByte(char c) {
    if (c >= '0' && c <= '9') {
        return c - '0';
    } else if (c >= 'A' && c <= 'F') {
        return c - 'A' + 10;
    } else if (c >= 'a' && c <= 'f') {
        return c - 'a' + 10;
    }
}

void TransformMac(char input[6][2], byte output[6]) {
    for (int i = 0; i < 6; ++i) {
        output[i] = (HexCharToByte(input[i][0]) << 4) | HexCharToByte(input[i][1]); 
    }
}