我有一个long[],我想一次读取两个比特。我的数据是首尾相连的二进制数00、01、10和11,填充到一个长数组中,然后填充到一个数组中。
我将一次读取一段很长的数据,可能从中途开始读取,而且看起来从内存中直接读取会更有意义,一次读取两个字节,而不是遍历long[]并使用掩码一次提取两位。
我似乎不知道该怎么做,而且我从来都不擅长直接访问内存(自从我在java上长大以来)。
我尝试过实例化一个数组
unsigned long t[5];
t[0] = 4294967295;
t[1] = 0;
t[2] = 4294967294;
t[3] = 4294967296;
t[4] = 1;
然后打印*(&t)
和*(&t+1)
,但是加1当然知道它的大小是long,并且‘s会添加适当的值。
发布于 2012-02-09 19:56:57
使用指向字节大小的数据类型的指针。试试这个:
unsigned char* p = (char *)t;
并使用p指针。
发布于 2012-02-09 19:57:04
好吧,你总是可以将指针转换到char*,以逐字节获取它,如果你还需要一次读取2个字节,你将需要使用&和一个合适的位掩码(即0x3来获取最低的2位)。如果您愿意,您可以随时使用<<或>>操作符来移动此掩码,以匹配当前字节中的更高或更低。
发布于 2012-02-09 19:58:20
为此,使用std::vector<bool>
而不是long[]
。检索i
的第2位块可以使用
(int(v[i*2]) << 1) | v[i*2+1]
https://stackoverflow.com/questions/9217736
复制