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

问题描述 投票:2回答:4

我试图将一个int值(所有4个字节)存储到char *中:

因此,我想将整个值,即int变量的所有字节(全部4)存储到char中,以便在512字节中使用4个字节。我也应该能够读回我指定的值。我试图使用很多东西,但无法解决这个问题。

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

char *c = malloc(512);
int value = 4096;
c
4个回答
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));

2
投票

我写了C或C ++已经有一段时间了,但我相信你可以用memcpy来做你想做的事情。

memcpy(c, &value, 4);

这应该将值的地址中的4个字节复制到从c分配的字节中。如果你想确定整数的大小,可以使用sizeof(int)而不是4.这样就可以了

memcpy(c, &value, sizeof(int));

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;
}

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]是什么?)取决于是否使用了小端或大端。

© www.soinside.com 2019 - 2024. All rights reserved.