首页 > 解决方案 > C4302 reinterpret_cast 从 const _Elem * 截断到 unsigned char

问题描述

嗨收到这条消息,我需要帮助:

严重性代码描述项目文件行抑制状态警告 C4302 'reinterpret_cast':从 'const _Elem *' 截断到 'unsigned char' 第 94 行

严重性代码说明项目文件行抑制状态警告 C4302 'reinterpret_cast':从 'const _Elem *' 截断到 'unsigned char' 行 95

    uint16_t Id = 325;
std::stringstream stream;
stream << std::setfill('0') << std::setw(4) << std::hex << Id; //Result: 0145
std::string str1 = stream.str().substr(0, 2); //Result: 01
std::string str2 = stream.str().substr(2, 2); //Result: 45
unsigned char char1 = reinterpret_cast<unsigned char>(("0x" + str1).c_str()); //Wanted result: 0x01
unsigned char char2 = reinterpret_cast<unsigned char>(("0x" + str1).c_str()); //Wanted result: 0x45
unsigned char Mac[6] = { 0x00, 0x1D, 0xE2, 0x03, char1, char2 };

标签: c++

解决方案


你走了长的路:从一个数字到一个字符串,把它切碎,然后将字符串重新解析为一个数字......

而是使用简单的按位运算:

unsigned char MSB = Id >> 8;
unsigned char LSB = Id & 0xFF;
unsigned char Mac[6] = { 0x00, 0x1D, 0xE2, 0x03, MSB, LSB };

推荐阅读