如何在由malloc分配的char *中存储int

时间:2019-03-29 17:41:00

标签: c

我试图将一个int值(全部4个字节)存储到 char *

因此,我想将完整值存储,即将int变量的所有字节(全部4个)存储到char中,这样我就用完了512个字节中的4个字节。我还应该能够读回我分配的值。我试图使用很多东西,但无法弄清楚。

这是针对我的LFS(日志文件系统)的,我尝试使用数据碎片将文件存储到磁盘上的数据块中

char *c = malloc(512);
int value = 4096;

4 个答案:

答案 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]是什么?)取决于使用的是低端还是大端。