我试图将一个int值(全部4个字节)存储到 char * :
因此,我想将完整值存储,即将int变量的所有字节(全部4个)存储到char中,这样我就用完了512个字节中的4个字节。我还应该能够读回我分配的值。我试图使用很多东西,但无法弄清楚。
这是针对我的LFS(日志文件系统)的,我尝试使用数据碎片将文件存储到磁盘上的数据块中
char *c = malloc(512);
int value = 4096;
答案 0 :(得分:4)
您可以复制到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));
答案 1 :(得分:2)
自从我编写C或C ++已经有一段时间了,但是我相信您可以使用memcpy来完成您想要的事情。
memcpy(c, &value, 4);
这应该将值地址的4个字节复制到您从c分配的字节中。如果您想确定整数的大小,可以使用sizeof(int)而不是4。这样就可以了
memcpy(c, &value, sizeof(int));
答案 2 :(得分:1)
可以使用其他指针。
强制转换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;
}
答案 3 :(得分:1)
一个人可以使用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]
是什么?)取决于使用的是低端还是大端。