3 回答
TA贡献1824条经验 获得超5个赞
unsigned short _byteswap_ushort(unsigned short value);
unsigned long _byteswap_ulong(unsigned long value);
unsigned __int64 _byteswap_uint64(unsigned __int64 value);
int32_t __builtin_bswap32 (int32_t x)int64_t __builtin_bswap64 (int64_t x)
TA贡献1876条经验 获得超7个赞
#include <climits>template <typename T>T swap_endian(T u){
static_assert (CHAR_BIT == 8, "CHAR_BIT != 8");
union
{
T u;
unsigned char u8[sizeof(T)];
} source, dest;
source.u = u;
for (size_t k = 0; k < sizeof(T); k++)
dest.u8[k] = source.u8[sizeof(T) - k - 1];
return dest.u;}swap_endian<uint32_t>(42).
TA贡献1820条经验 获得超10个赞
假设您的数据流有一个端编码的32位整数。下面是如何提取它(假设没有签名的字节):
i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);
如果它是大端,下面是如何提取它:
i = (data[3]<<0) | (data[2]<<8) | (data[1]<<16) | (data[0]<<24);
TL;DR:
dataunsigned charuint8_tsigned charchardata[x]data[x] << 24
- 3 回答
- 0 关注
- 1920 浏览
添加回答
举报
