我有一个字节数组,声明像这样:C++矢量数据访问
typedef unsigned char byte;
vector<byte> myBytes = {255, 0 , 76 ...} //individual bytes no larger in value than 255
我是我需要访问向量的原始数据(当然没有任何复制)的问题, 但我需要分配任意数量的位给指向元素的任何给定指针。
换句话说,我需要将一个unsigned int
分配给向量中的某个位置。
因此,考虑上面的例子,我希望做类似如下:
myBytes[0] = static_cast<unsigned int>(76535); //assign n-bit (here 32-bit) value to any index in the vector
使矢量数据现在看起来像:
{2, 247, 42, 1} //raw representation of a 32-bit int (76535)
这可能吗?我需要使用一个向量,并且只是想知道原始数据是否可以用这种方式访问,或者向量存储原始数据如何使这个不可能或更糟 - 不安全?
在此先感谢!
编辑
我不想增加复杂性,但我构建不同大小的整数如下:
//**N_TYPES
u16& VMTypes::u8sto16(u8& first, u8& last) {
return *new u16((first << 8) | last & 0xffff);
}
u8* VMTypes::u16to8s(u16& orig) {
u8 first = (u8)orig;
u8 last = (u8)(orig >> 8);
return new u8[2]{ first, last };
}
有什么可怕的这件事,是我不知道的生成的数字的字节序。但是我知道我正在构建和破坏它们(我正在编写一个堆栈机器),所以如果我没有弄错,排序不会受到我正在尝试做的事情的影响。
EDIT 2
我构建整数在以下可怕方式:
u32 a = 76535;
u16* b = VMTypes::u32to16s(a);
u8 aa[4] = { VMTypes::u16to8s(b[0])[0], VMTypes::u16to8s(b[0])[1], VMTypes::u16to8s(b[1])[0], VMTypes::u16to8s(b[1])[1] };
难道这再正常工作?:
memcpy(&_stack[0], aa, sizeof(u32));
另外不要忘记观看未对齐的访问。 –
@LogicStuff是的,但你的评论是无益的。 SuperCookie,new用于动态内存分配并返回一个指针;更好地让矢量为你管理内存。 – Straw1239
这里的重点是如果你的系统是小端或大端。根据你的系统,字节的顺序应该颠倒过来。 – mustafagonul