gpt4 book ai didi

c++ - 从文件中读取位

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:47:13 25 4
gpt4 key购买 nike

例如,我可以使用

从文件中读取 4 个字节
ifstream r(filename , ios::binary | ios::in)
uint_32 readHere;
r.read( (char*)&readHere, 4 )

但是我怎么能读取 4.5 字节 = 4 字节和 4 位。

我想到的是

ifstream r(filename , ios::binary | std::in)
uint_64t readHere;
r.read( (char*)&readHere, 5 ) // reading 5 bytes ;

uint_64t tmp = readHere & 11111111 // extract 5th bytes
tmp = tmp >> 4 // get first half of the bites
readHere = (( readHere >> 8 ) << 8) | tmp // remove 5th byte then add 4 bits

但我不确定应该如何取一半字节,如果是第一个或最后一个 4。有没有更好的方法来检索它?

最佳答案

无论是在文件中还是在内存中,您可以读取或写入的最小单位是字符(在常见系统上为字节 (*))。您可以按字节方式浏览更长的元素,并且有效的字节顺序在这里很重要。

uint32_t u = 0xaabbccdd;
char *p = static_cast<char *>(&u);
char c = p[0]; // c is 0xdd on a little endian system and 0xaa on a big endian one

但是一旦您进入一个字节,您所能做的就是使用按位与和移位来提取低位或高位位。这里不再有字节顺序,除非决定使用一种约定。

顺便说一句,如果您在网络接口(interface)上读取,甚至在单独传输位的串行线路上读取,您一次会得到一个完整的字节,并且没有办法在一次读取中只读取 4 位,而其他 4 位读取在下一个。

(*) 较旧的系统(80 年代的 CDC)过去每个字符有 6 位 - 但当时不存在 C++,我不确定那里是否存在 C 编译器

关于c++ - 从文件中读取位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com