我试图将一个int值(所有4个字节)存储到char *中:
因此,我想将整个值,即int变量的所有字节(全部4)存储到char中,以便在512字节中使用4个字节。我也应该能够读回我指定的值。我试图使用很多东西,但无法解决这个问题。
这是我的LFS(日志文件系统),我尝试使用数据碎片将文件存储到磁盘上的数据块中
char *c = malloc(512);
int value = 4096;
您可以复制到c
指向的缓冲区中:
memcpy(c, &value, sizeof(value));
如果要在此后写入另一个值,可以向c
添加偏移量:
memcpy(c + sizeof(value), &value2, sizeof(value2)); // adds value2 at an offset right after value
要读取该值,可以将其复制到另一个变量中:
int readVal;
memcpy(&readVal, c, sizeof(readVal));
我写了C或C ++已经有一段时间了,但我相信你可以用memcpy来做你想做的事情。
memcpy(c, &value, 4);
这应该将值的地址中的4个字节复制到从c分配的字节中。如果你想确定整数的大小,可以使用sizeof(int)而不是4.这样就可以了
memcpy(c, &value, sizeof(int));
可以使用其他指针。 转换char指针使其可用于int指针。 int指针可以用作数组,可以轻松分配或打印。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void) {
char *line = malloc ( 512);
char *text = line + sizeof ( int) * 2;//reserve space for two int
int *value = (int *)line;//cast to int pointer
value[0] = 4096;//or *value = 4096;
value[1] = 25;
strcpy ( text, "text and more text");
printf ( "%d\n", value[0]);//or printf ( "%d\n", *value);
printf ( "%d\n", value[1]);
printf ( "%s\n", text);
return 0;
}
可以使用union
直接写入值,
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h> /* C99 */
union Block {
char c[512];
int32_t d;
};
int main(void) {
union Block *b;
if(!(b = malloc(sizeof *b))) return perror("?"), EXIT_FAILURE;
b->d = 4096;
printf("%d\n", b->d);
return 0;
}
在这里,我使用了C99 int32_t
来确保它是32位。但是,位顺序(b->c[0]
是什么?)取决于是否使用了小端或大端。