需要将代表6个十六进制值的12字节字符串转换为std:array<uint8_t,6>
。我从十六进制转换中得到了错误的结果。我将here上的某些代码重新用于字符串的十六进制转换。谢谢您的时间
代码
std::vector<std::array<uint8_t,6> > tracker =
{
{ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66 },
{ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99 }
};
std::array<uint8_t, 6> singular= { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 };
void setMac() {
Serial.println("MAC TEST 1");
std::string macInput = "121212121212";
macTrans(macInput);
tracker.push_back(singular);
for (const auto& target : tracker)
{
printf("%02x:%02x:%02x:%02x:%02x:%02x\n", target[0], target[1], target[2], target[3], target[4], target[5]);
}
}
void macTrans(std::string mac){
singular = HexToBytes(mac);
}
std::array<uint8_t,6> HexToBytes(const std::string& hex) {
std::array<uint8_t,6> bytes;
for (unsigned int i = 0; i < hex.length() && i < 12; i += 2) {
std::string byteString = hex.substr(i, 2);
uint8_t byte = (unsigned char) strtol(byteString.c_str(), NULL, 16);
if (i==0)
bytes[0] = byte;
else
bytes[i-1] = byte;
}
return bytes;
}
当前输出:
MAC TEST 1
66:66:66:66:66:66
99:99:99:99:99:99
12:12:30:12:fe:12
预期输出:
MAC TEST 1
66:66:66:66:66:66
99:99:99:99:99:99
12:12:12:12:12:12
答案 0 :(得分:2)
在HexToBytes
中,您正在数组外部进行编写,并且行为不确定。
(您正在写入位置0、1、3、5、7和9。)
“重新利用”找到的代码时,应该使用除以二而不是减一。
替换
if (i==0)
bytes[0] = byte;
else
bytes[i-1] = byte;
与
bytes[i/2] = byte;