C++ 从远程设备解包整数值的安全方法
我通过USB协议从远程设备获取字节。这些字节包含整数数据。以下代码是一种安全的解包方式,不会出现可移植性问题(已知的endianess除外):C++ 从远程设备解包整数值的安全方法,c++,C++,我通过USB协议从远程设备获取字节。这些字节包含整数数据。以下代码是一种安全的解包方式,不会出现可移植性问题(已知的endianess除外): #包括 #包括 #包括 #包括 int main() { std::uint8_t someArray[4]={1,0,0,0}; std::int32\u t someValue=0; std::memcpy(&someValue,someArray,4); std::cout是 std::memcpy确实是一条可行之路。在现实代码中,我会static
#包括
#包括
#包括
#包括
int main()
{
std::uint8_t someArray[4]={1,0,0,0};
std::int32\u t someValue=0;
std::memcpy(&someValue,someArray,4);
std::cout是
std::memcpy
确实是一条可行之路。在现实代码中,我会static\u assert
检查所使用类型的大小,并在运行时检查数据大小,但仅此而已。这可能行得通,但就我个人而言,我会通过手动汇编八位字节的结果来同时解决尾数和转换问题。你知道它的32位.Y你知道它(显然)可能是有符号的(这是唯一让它有点棘手的部分),我假设你知道包装器(即发送此信息的设备)是否以网络和主机顺序(即它总是在总线上)将其发送到总线上。鉴于所有这些,将八位字节组合成32位结果应该很简单。
#include <iostream>
#include <string>
#include <cstdint>
#include <cstring>
int main()
{
std::uint8_t someArray[4] = {1,0,0,0};
std::int32_t someValue = 0;
std::memcpy(&someValue, someArray, 4);
std::cout << someValue << std::endl;
}