我想将 2 个字符和一个位 vector (uint64_t) 写入文件,但我首先必须将它们全部写入缓冲区。然后缓冲区将被写入文件。我应该如何将这 3 个变量写入缓冲区(空指针),以便所有变量都包含在一个(空指针)变量中。
比如我要写
char a = 'a';
char b = 'b';
uint64_t c = 0x0000111100001111;
进入
void *buffer = malloc(sizeof(char)*2+sizeof(uint64_t));
然后使用
将其写入文件write(fd, buffer, sizeof(char)*2+sizeof(uint64_t));
最佳答案
这是(几乎*)完全安全的做法:
uint8_t *buffer = malloc(2 + sizeof(uint64_t));
buffer[0] = a;
buffer[1] = b;
memcpy(buffer + 2, &c, sizeof(c));
您可能想做类似 *(uint64_t *)(buffer + 2) = c;
的操作,但由于对齐限制,这不可移植。
请注意,根据 C 标准中的定义,sizeof(char) == 1
。
(*) 我假定了 8 位 char
,这几乎是通用的,但并非完全通用;在具有 16 位 char
的平台上,对 a
和 b
也使用 memcpy
。
关于c - 如何写入缓冲区(空指针)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625707/