代码之家  ›  专栏  ›  技术社区  ›  Aravind A

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

  •  -1
  • Aravind A  · 技术社区  · 6 年前

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

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

    0 回复  |  直到 6 年前
        1
  •  2
  •   Eric Postpischil    6 年前

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

    字节中的位数由C实现设置。据英国《每日邮报》报道 CHAR_BIT ,定义于 <limits.h> .在所有常见的C实现中,它是8个。

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

        2
  •  0
  •   SoronelHaetir    6 年前

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

        3
  •  0
  •   Spencer    6 年前

    允许C++ char 平台所需的任何尺寸。然而,宏观经济 CHAR_BIT 总是有一个数组中的位数 烧焦 .

    所以,要计算32字节中的位数,可以使用以下公式 32*CHAR_BIT .

    C++17引入了这种新类型 std::byte 这不是一种角色类型,而且总是如此 字符位 正如SO问题中所解释的 std::byte on odd platforms

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