C++ 我能确定从文件中读取的32字节二进制数据等于256位吗?

C++ 我能确定从文件中读取的32字节二进制数据等于256位吗?,c++,c,file-io,binary,byte,C++,C,File Io,Binary,Byte,我希望使用C/C++程序一次读取32字节的文件,但我希望确保数据为256位。本质上,我担心我从文件中读取的“字节”中的前导位被关闭?这是一个值得关注的问题吗? 示例:如果我有一个数字,那么2在二进制中表示为10。作为一个人,这对我来说已经足够了。 如果一台计算机被写为:00000010来表示一个1字节的字符值,那么这与计算机有什么不同???前导零会影响位计数吗?这会反过来影响像XOR这样的操作吗? 我很难理解它的影响!这是否涉及数据丢失?我真的不知道 我将感谢所有帮助我消除误解的人 字符位宏(在

我希望使用C/C++程序一次读取32字节的文件,但我希望确保数据为256位。本质上,我担心我从文件中读取的“字节”中的前导位被关闭?这是一个值得关注的问题吗? 示例:如果我有一个数字,那么2在二进制中表示为10。作为一个人,这对我来说已经足够了。 如果一台计算机被写为:00000010来表示一个1字节的字符值,那么这与计算机有什么不同???前导零会影响位计数吗?这会反过来影响像XOR这样的操作吗? 我很难理解它的影响!这是否涉及数据丢失?我真的不知道

我将感谢所有帮助我消除误解的人

字符位宏(在climits中定义)将告诉您在执行环境中一个字节由多少位组成。但是,我不知道最近有任何通用硬件使用8位以外的字节。一些专用处理器(如用于数字信号处理)可能会使用其他尺寸。此外,完全过时的设备使用了多种尺寸(8位的典型替代品是9位)。

C++允许
char
为平台所需的任何大小。但是,宏
CHAR\u BIT
始终具有
CHAR
中的位数

因此,要找出32字节中的位数,可以使用公式
32*CHAR\u BIT

C++17引入了新的类型
std::byte
,它不是字符类型,总是
CHAR\u BIT
位,如SO问题中所述


为了找到保存256位所需的字节数,您遇到了一个问题,因为
CHAR\u BIT
并不总是256的除数。所以,你必须决定你想要什么,并使用一个更复杂的公式。例如,
1+(255+CHAR\u位)/CHAR\u位
将给出保存256个连续位所需的字节数。

C标准库中读取文件或流的每个例程都以字节为单位读取。读取的每个字节都是固定位数;从文件中读取的内容不会因字节中前导零或缺少前导零而发生变化。有些例程返回单个字符(即字节)。一些例程将读取的数据放入缓冲区并返回读取的字节数。某些例程(如
scanf
)返回成功转换的项数计数。(通常不会使用这些例程读取固定数量的字节。)

字节中的位数由C实现设置。它在
中定义的
字符位中报告。在所有常见的C实现中,它是8个


虽然每个字节的位数没有变化,但从流中读取的字节数可以变化。如果流作为文本流打开,则可以“在输入和输出时添加、更改或删除字符,以符合主机环境中表示文本的不同约定”(C 2018 7.21.2)。为了避免这种情况,您应该以二进制流的形式打开一个流。

文件的内容是什么?你读的是32字节吗?或者您正在读取并转换为数字的是“0”或“1”字符(可能是256个,可能不是)?我建议您暂时忽略这一点。写一些简单的代码来读写文件中的数据,看看你是否遇到了麻烦。如果是,请寻求更具体的帮助。1字节是C/C++中最小的可寻址数据类型
char
的大小为1字节。但是1字节不一定是8位,尽管这是大多数现代平台中使用的最常见的大小。在
中检查编译器的
字符位
宏,了解每个字节的实际位数。或者使用保证为8位的数据类型,如
uint8\u t
@Kevin它是来自file@Lebeau这比那更复杂;请参阅我的编辑。我将使用
(256+(CHAR\u BIT-1))/CHAR\u BIT
。但这一点是正确的。