-2

查看 C 中 fread() 的文档:

宣言

以下是 fread() 函数的声明。

size_t fread(void*ptr, size_t size, size_t nmemb, FILE *stream)

参数

ptr - 这是指向最小大小为 size*nmemb 字节的内存块的指针。

size - 这是要读取的每个元素的字节大小。

nmemb - 这是元素的数量,每个元素的大小为大小字节。

stream - 这是指向指定输入流的 FILE 对象的指针。

有没有办法将大小指定为小于一个字节?还是一种仅将 fptr 向前移动一定位数的方法?

4

2 回答 2

0

你不能,但当然你可以写你自己的功能。

int readSomeBitsButOnlyLessThan9(FILE *file, size_t bitnum, size_t nbits, unsigned char *result)
{
    long byte = bitnum >> 3;
    int res;
    unsigned short val;

    if(nbits > 8) return -1;

    if(fseek(file, byte, SEEK_SET)) return -1;

    if(((bitnum + nbits) >> 3) > byte) 
    {
        if(fread(&val, 1, 2, file) != 2) return -1;
    }
    else
    {
        if(fread(&val, 1, 2, file) != 2) return -1;
    }
    val >>= 8 - (bitnum & 7);
    *result = val;
    return 0;
}

(现在是凌晨 1 点,我保证它没有错误)

于 2020-07-31T01:01:56.123 回答
0

字节是可以存储或访问的最小数据单位。

您需要读取一个字节,然后分别查看高位和低位。例如:

unsigned char value = get_value();
unsigned char upper = (value & 0xf0) >> 4;
unsigned char lower = value & 0x0f;
于 2020-07-31T00:08:27.607 回答