我需要从文件中读取一个字节。通常在读取时,我使用char数组作为缓冲区。但是,我需要能够使用byte执行二进制操作,这不能用char数组完成。这就是我所拥有的:
read(file, buffer, 1);
我已经尝试将缓冲区设置为char和int,但两者都给我警告它需要一个void *参数。但是,当然,这不允许二进制操作,如&。
如何存储缓冲区以便我可以对其执行二进制操作?
答案 0 :(得分:6)
您可以使用函数int fgetc (FILE *fp)
。
返回值为int
值,范围为0到255或EOF
。
答案 1 :(得分:1)
可以使用char
对unsigned
数据类型执行二进制操作。即使它的数组二进制操作可以对数组的单个元素进行。
供您参考。
ssize_t read(int fd, void *buf, size_t count);
缓冲区必须是character
或character array
的地址,在您的单char
中就足够了。如果要使用数组,请使用元素array[0]
并对其执行操作。
如上述评论所述
unsigned char c;
read(file, &c, 1);
答案 2 :(得分:1)
您可以读取一个char数组(据说)知道该怎么做,然后对该数组的第一个元素执行二进制操作。
答案 3 :(得分:1)
typedef unsigned char uint8_t; /* Not necessary if you are using C99, i.e. <stdint.h>. */
uint8_t buffer[BUF_SIZE] = {0};
.
.
.
if (fread(buffer, sizeof(buffer[0]), 1, file) == 1)
{
buffer[0] ^= 0xFFu; /* Or any other bit-wise operation. */
}
参考 -
1. https://linux.die.net/man/3/fread
2. http://en.cppreference.com/w/c/types/integer