C++ 矢量数据访问
C++ Vector data access
我有一个字节数组,声明如下:
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 };
}
可怕的是,我不确定生成的数字的字节序。但我知道我在任何地方构建和破坏它们都是一样的(我正在编写堆栈机器),所以如果我没记错的话,字节序不会受到我想要做的事情的影响。
编辑 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));
是的,这是可能的。您按&myVector[n]
获取起始地址,并将int
memcpy
到该位置。确保保持在矢量的范围内。
反之亦然。把位置和memcpy
拿出来到你的int
。
如建议:通过使用memcpy
,您将整数的字节表示复制到向量中。该字节表示形式或字节顺序可能与您的预期不同。关键字有大端序和小端序。
正如 knivil 所说,如果你知道你的系统的字节序,memcpy 就会起作用。但是,如果你想安全,你可以使用按位算术来做到这一点:
unsigned int myInt = 76535;
const int ratio = sizeof(int) / sizeof(byte);
for(int b = 0; b < ratio; b++)
{
myBytes[b] = byte(myInt >> (8*sizeof(byte)*(ratio - b)));
}
可以使用类似的模式从向量中读出 int,如果你想让我告诉你如何让我知道。
相关文章:
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- C++ 11 中的锁定是否保证访问数据的新鲜度?
- 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 向量下标出的范围错误.即使向量的索引大于访问数据的索引,也会发生误差
- 通过指针访问数据(重新解释转换)与 .或 ->运算符
- C Koala图库 - 了解访问数据结构的语法
- CAFFE C - 其他层中的访问数据
- C++ 访问数据的链表实现
- 基于两个程序之间的事件触发器访问数据(内存)
- 引用本地可访问数据的正当理由
- 函数调用不起作用,矢量访问数据
- BMP 文件,访问数据
- 如何从其他类访问数据私有内部类
- 如何从双精度向量的向量访问数据
- 从 Vector3f 访问数据
- 从文件访问数据
- 如何在进程已经在访问数据结构时修改数据结构
- 如何从 GMemoryOutputStream 访问数据
- 使用 ostream 从另一个类的结构访问数据