在C/ c++中从数据缓冲区中扫描



我正在使用一个封闭的硬件,我想加载一个文本文件。我只有以下函数来访问辅助内存:

bool load_file(const char *filename, int **buf, int *size)

这意味着我将结束所有的数据在buf和它的大小在size。我怎么能提取字符串,整数或浮点数据从它?我想用类似于scanf.

的方法来做。

谢谢。

您可以使用sscanf扫描内存块而不是文件,类似于您可以使用sprintfprintf扫描到内存的方式。原型为:

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值。

最新更新