使用memcpy,endian将unsigned long转换为std :: vector?

时间:2014-04-12 23:34:39

标签: c++ vector int endianness unsigned

我正试图将无符号长整数转换为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

我怎样才能以优雅的方式解决这个问题?

3 个答案:

答案 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;
}

您可以通过展开此循环来交换性能(可能)以获得优雅。我把它隐藏在我自己的代码中的内联函数后面。