我正在使用一个封闭的硬件,我想加载一个文本文件。我只有以下函数来访问辅助内存:
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值。