将 std::十六进制字符串转换为 std::array<T, 6>
Converting std::string of hexadecimal to std::array<T, 6>
一个代表6个十六进制值的12个字节字符串,需要转换为 std:array<uint8_t,6>
。我从十六进制的转换中获得了错误的结果。我在此处重新使用了一些代码,以进行字符串的十六进制转换。谢谢你的时间
代码
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:%02xn", 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
在 HexToBytes
中,您在数组外写作,但行为不确定。
(您正在写入0、1、3、5、7和9的位置。(
当您"重新利用"您发现的代码时,应该使用两个分裂而不是按一个减法使用。
替换
if (i==0)
bytes[0] = byte;
else
bytes[i-1] = byte;
bytes[i/2] = byte;
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 是std :: set&lt; std :: future&gt;不可能存在
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- 使用 std::vector<boost::shared_ptr<Base_Class>> 或 boost::p tr_vector 的性能注意事项是什么<Base>
- std::map<std::set, double> AND std:<long>map< std::p air<long, long>, double>
- 如何获取std::vector<DMatch>