首先声明一点,只有结构体会有字节翻转问题,char数组不存在此问题,所以借助char数组来进行所谓的字节翻转,进而保证发送的数据都是大端数据。
记在开头,发现小端电脑即使鼠标悬浮显示的是004d但实际内存里是4d00!!!
自定义结构体原始值
按大端数据存储格式依次将数据放入char数组
longlong类型翻转前内存
longlong类型翻转后存入char数组
示例代码如下:
#include <iostream>
struct StructTest
{
unsigned short point_x; // 2字节
unsigned short point_y; // 2字节
};
// 自定义结构体字节翻转
char * FlipStructTestByte(StructTest _data) {
char* old_data = (char *)&_data;
char data[4];
data[0] = (char)(_data.point_x / 256);
data[1] = (char)_data.point_x;
data[2] = (char)(_data.point_y / 256);
data[3] = (char)_data.point_y;
return data;
}
// longlong类型字节翻转
char* LongLongFlip() {
unsigned long long m_ullCheckSum = 111222333;//8字节
char* old_data = (char *)&m_ullCheckSum;
char new_data[8];
for (int i = 0; i < 8; ++i)
{
new_data[i] = old_data[7 - i];
}
return new_data;
}
int main() {
int endian_type_;
// 大小端判断
union
{
unsigned int bytes;
unsigned char lowerByte;
} block;
block.bytes = 1;
if (block.lowerByte) //小端
{
endian_type_ = 0;
}
else //大端
{
endian_type_ = 1;
}
if (endian_type_ == 0)
{
StructTest test_hh;
test_hh.point_x = 77;
test_hh.point_y = 66;
FlipStructTestByte(test_hh);
LongLongFlip();
}
std::cout << "hello world";
system("pause");
return 0;
}