我正试图将无符号长整数转换为char向量。
std::vector<char> out(1024);
while(n < length)
{
for(int = 0; i < 32; i++)
{
//code...
unsigned long v0 = 0x9514a327;
//code...
}
memcpy( &out[n], &v0, sizeof( v0 ) );
}
out在while循环中动态填充(out存储v0的值)。我的问题是,订单已更改为:
out[0] = 0x27
out[1] = 0xa3
out[2] = 0x14
out[3] = 0x95
但我需要:
out[0] = 0x95
out[1] = 0x14
out[2] = 0xa3
out[3] = 0x27
我怎样才能以优雅的方式解决这个问题?
答案 0 :(得分:2)
优雅且更快捷的方法是避免memcpy()
并直接从long
分配位移的字节。你得到了相同的char
- 数组,甚至独立于主机字节序!
答案 1 :(得分:0)
已经很晚了,我没有测试过,但应该给你一个想法
v0 = ((v0 & 0xFF) << 24) | ((v0 & 0xFF00) << 8) | ((v0 & 0xFF0000) >> 8) | ((v0 & 0xFF000000) >> 24);
答案 2 :(得分:0)
for (int n = sizeof v0; n--; )
{
out[n] = v0 % 0x100;
v0 /= 0x100;
}
您可以通过展开此循环来交换性能(可能)以获得优雅。我把它隐藏在我自己的代码中的内联函数后面。