我如何知道我正在读取的内存地址是否为空C++?
How can I know if the memory address I'm reading from is empty or not in C++?
所以在嵌入式系统上,我正在读取一些整数并将其写入闪存。我可以使用此函数读取它:
read(uint32_t *buffer, uint32_t num_words){
uint32_t startAddress = FLASH_SECTOR_7;
for(uint32_t i = 0; i < num_words; i++){
buffer[i] = *(uint32_t *)(startAddress + (i*4));
}
}
然后
uint32_t buf[10];
read(buf,10);
我怎么知道buff[5]
是否为空(上面有任何东西)?
现在在空的物品上,我得到这样的东西165 '¥'
或这个255 'ÿ'
有没有办法找出答案?
首先需要定义"空",因为你使用的是uint32_t。一个好的 ide 是使用值0xFFFFFFFF
(4294967295十进制)作为空值,但您需要确保此值不用于其他事情。然后你可以测试是否if ( buf [ 5 ] == 0xFFFFFFFF )
.
但是,如果您使用整个uint32_t范围,则无法检测它是否为空。
另一种方法是使用结构,并定义一个空位。
struct uint31_t
{
uint32_t empty : 0x01; // If set, then uint31_t.value is empty
uint32_t value : 0x1F;
};
然后你可以检查空位是否被设置,但不利的部分是你损失了整整一个位。
如果你的数组是一个指针数组,你可以通过与{nullptr}
进行比较来检查,否则,除非你把所有的初始索引初始化为相同的值,然后检查值是否仍然相同,否则你不能。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- C/C++预处理器是否可以检测一些编译器选项
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话