在C/ c++中从数据缓冲区中扫描
scanf from data buffer in C/C++
我正在使用一个封闭的硬件,我想加载一个文本文件。我只有以下函数来访问辅助内存:
bool load_file(const char *filename, int **buf, int *size)
这意味着我将结束所有的数据在buf和它的大小在size。我怎么能提取字符串,整数或浮点数据从它?我想用类似于scanf.
的方法来做。谢谢。
您可以使用sscanf
扫描内存块而不是文件,类似于您可以使用sprintf
将printf
扫描到内存的方式。原型为:
int sscanf (const char *str, const char *format, ...);
换句话说,与scanf
相同,但增加了一个指针。
用于将字符数据转换为其他类型。如果内存缓冲区中有原始数据,则可以强制类型转换和取消引用。
换句话说,假设你有一个内存缓冲区,它从第五个位置(偏移量4)开始,就像:
#include <stdio.h>
int main(void) {
// +--------------+--> little-endian,
// | | 32-bit = 42.
char xyz[] = "1234x2ax00x00x00";
int x = *((int*)(xyz+4));
printf ("%dn", x);
return 0;
}
假设您的整数编码与我的相同,则输出42(十六进制2A)。一次一个位地拆分表达式:
<>之前(xyz+4):获得xyz后面四个单位的地址。因为xyz是一个字符指针,这意味着四个字节。(int*)(xyz+4):将其强制转换为int指针。*((int*)(xyz+4)):取消引用以获得该地址的int值。相关文章:
- C++:使用缓冲区中的数据填充结构
- 串行端口写入究竟如何从缓冲区实际写入数据?
- 如何避免将数据缓冲区的额外副本复制到字符串?
- 深度缓冲区未填充阴影贴图渲染通道中的数据
- 缓冲区填充了不同类型的数据和严格的混叠
- 增强循环缓冲区push_back在前面插入数据
- 如何用尽可能少的数据将数据缓冲区计算为零校验和值
- 使用 OpenGL 插值数据缓冲区?
- 使用 boost::p ython 将数据缓冲区放入C++中
- 将二进制数据缓冲区存储在协议缓冲区消息中
- 调用readAll()后,不再无法从QIODevices检索数据.缓冲区已冲洗
- gpsd客户端数据缓冲区
- 如何从数据缓冲区执行 x86 命令
- 在 c++ 中使用消息结构读取/填充数据缓冲区的正确方法是什么?
- C++多次使用更多数据缓冲区
- 如何从MediaCodec输出缓冲区中获取pcm数据缓冲区
- 在不违反严格混叠的情况下使用数据缓冲区
- 在C/ c++中从数据缓冲区中扫描
- opencv C++从android NV21图像数据缓冲区创建Mat对象
- 优化内存和性能的传输数据缓冲区