如何写入缓冲区(void指针)?

Kob*_*obi 2 c unix linux

我想用2个字符和一个向量(uint64_t)写入文件,但我首先必须将它们全部写入缓冲区.然后缓冲区将写入文件.我应该如何将这3个变量写入缓冲区(void指针),以便所有变量都包含在一个(void指针)变量中.

比如我想写

char a = 'a';
char b = 'b';
uint64_t c = 0x0000111100001111;
Run Code Online (Sandbox Code Playgroud)

void *buffer = malloc(sizeof(char)*2+sizeof(uint64_t));
Run Code Online (Sandbox Code Playgroud)

然后使用将其写入文件

write(fd, buffer, sizeof(char)*2+sizeof(uint64_t));
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 8

这是(几乎*)完全安全的方式:

uint8_t *buffer = malloc(2 + sizeof(uint64_t));
buffer[0] = a;
buffer[1] = b;
memcpy(buffer + 2, &c, sizeof(c));
Run Code Online (Sandbox Code Playgroud)

您可能会尝试做类似*(uint64_t *)(buffer + 2) = c;但由于对齐限制而无法移植的内容.

请注意sizeof(char) == 1,根据C标准中的定义.

(*)我假设8位char,这几乎是,但不完全是通用的; 在16位平台上char,memcpy用于ab.