首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >逐字节读取内存

逐字节读取内存
EN

Stack Overflow用户
提问于 2012-02-10 03:52:48
回答 5查看 2.7K关注 0票数 0

我有一个long[],我想一次读取两个比特。我的数据是首尾相连的二进制数00、01、10和11,填充到一个长数组中,然后填充到一个数组中。

我将一次读取一段很长的数据,可能从中途开始读取,而且看起来从内存中直接读取会更有意义,一次读取两个字节,而不是遍历long[]并使用掩码一次提取两位。

我似乎不知道该怎么做,而且我从来都不擅长直接访问内存(自从我在java上长大以来)。

我尝试过实例化一个数组

代码语言:javascript
代码运行次数:0
运行
复制
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会添加适当的值。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-10 03:56:57

使用指向字节大小的数据类型的指针。试试这个:

代码语言:javascript
代码运行次数:0
运行
复制
unsigned char* p = (char *)t;

并使用p指针。

票数 2
EN

Stack Overflow用户

发布于 2012-02-10 03:57:04

好吧,你总是可以将指针转换到char*,以逐字节获取它,如果你还需要一次读取2个字节,你将需要使用&和一个合适的位掩码(即0x3来获取最低的2位)。如果您愿意,您可以随时使用<<或>>操作符来移动此掩码,以匹配当前字节中的更高或更低。

票数 1
EN

Stack Overflow用户

发布于 2012-02-10 03:58:20

为此,使用std::vector<bool>而不是long[]。检索i的第2位块可以使用

代码语言:javascript
代码运行次数:0
运行
复制
(int(v[i*2]) << 1) | v[i*2+1]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9217736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档