将矢量值复制到char *

时间:2015-09-22 12:20:50

标签: c++ vector casting type-conversion

我有三个载体

std::vector<long long unsigned> eightByte_v;
std::vector<unsigned char> oneByteDelta_v;
std::vector<unsigned short> twoByteDelta_v;

我向矢量

插入了两个值
eightByte_v.pushback(0x111111111111);
eightByte_v.pushback(0x2222222222222222);
oneByteDelta_v.pushback(0x33);
oneByteDelta_v.pushback(0x44);
twoByteDelta_v.pushback(0x5555);
twoByteDelta_v.pushback(0x6666);

我想将所有向量合并到char *,如下所示。

    char[0] = 00
    char[1] = 00
    char[2] = 11
    char[3] = 11
    char[4] = 11
    char[5] = 11
    char[6] = 11
    char[7] = 11
    char[8] = 22
    char[9] = 22
    char[10] = 22
    char[11] = 22
    char[12] = 22
    char[13] = 22
    char[14] = 22
    char[15] = 22
    char[16] = 22
    char[17] = 22
    char[18] = 33
    char[19] = 44
    char[20] = 55
    char[21] = 55
    char[22] = 66
    char[23] = 66
从char 0到17的

相当于eightByte_v
从char 18到19相当于oneByte_v
从char 20到23相当于twoByte_v

我想我可以用memcpy来做,但还有其他办法吗?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

使用union春天的替代方案,但是很难或不可能以一种定义的方式做到这一点:你总会遇到结构打包和指针转换问题。

鉴于C ++标准保证std::vector中的数据连续性(并且可以使用data()函数访问数据缓冲区),memcpy可以说是最好的方法。

请记住char的签名依赖于平台。你可能想要更明确;考虑使用unsigned char