gpt4 book ai didi

file - 分别在二进制和文本文件中存储数字需要多少字节

转载 作者:行者123 更新时间:2023-12-04 22:56:10 25 4
gpt4 key购买 nike

如果我想存储一个数字,比如说 56789 在一个文件中,分别需要多少字节才能将它存储在二进制文件和文本文件中?我想知道如何将字节分配给二进制和文本文件中的数据。

最佳答案

这取决于:

  • 文本编码和数字系统(十进制、十六进制等等...)
  • 签名/未签名
  • 单个整数或多个(需要分隔符)
  • 数据类型
  • 目标架构
  • 使用压缩编码

  • 在 ASCII 中,一个字符占 1 个字节。在 UTF-8 中,一个字符占用 1 到 4 个字节,但数字总是占用 1 个字节。在 UTF-16 或 Unicode 中,每个字符需要 2 个或更多字节。

    Non-ASCII formats may require additional 2 bytes (initial BOM) for the file, this depends on the editor and/or settings used when the file was created.



    但是让我们假设您将数据存储在一个简单的 ASCII 文件中,否则讨论会变得不必要地复杂。

    我们还假设您使用十进制数字系统。

    In hexadecimal you use digits 0-9 and letters a-f to represent numbers. A decimal (base-10) like 34234324423 would be 7F88655C7 in hexadecimal (base-16). In the first system we have 11 digits, in the second just 9 digits. The minimum base is 2 (digits 0 and 1) and the common maximum base is 64 (base-64). Technically, with ASCII you could go as high as base-96 maybe base-100, but that's very uncommon.



    每个数字( 0-9 )将占用一个字节。如果您有带符号的整数,则额外的减号将引导数字(因此负数会额外收取 1 个字节)。

    在某些情况下,您可能希望存储多个数字。您将需要一个分隔符来区分数字。逗号 ( , )、冒号 ( : )、分号 ( ; )、管道 ( | ) 或换行符 ( LFCR ,在 Windows 上占用 |14 | 4 | 或 5 | 4 | 或 6 6 个字节 | 7 字节)在 djungle 中都被观察到作为数字的合法分隔符。

    What is a numeral? The concept or idea of the quantity 8 that is IN YOUR HEAD is the number. Any representation of that concept on stone, paper, magnetic tape, or pixels on a screen are just that: REPRESENTATIONS. They are symbols which stand for what you understand in your brain. Those are numerals. Please don't ever confuse numbers with numerals, this distinction is the foundation of mathematics and computer science.



    在这些情况下,您希望为每个数字的分隔符计算一个附加字符。或者也许每个数字减一。这取决于您是想用标记终止每个数字还是将数字彼此分开:

    示例(三位数字和三个换行符):6 个字节
    1<LF>
    2<LF>
    3<LF>

    示例(三位数字和两个逗号):5 个字节
    1,2,3

    示例(四位数字和一个逗号):5 个字节
    2134,

    示例(符号和一位数字):2 个字节
    -3

    如果您将数据存储在 中二进制格式 (不要与 二进制数系统 混淆,后者仍然是文本格式)占用的内存取决于整数类型(或者更好的是整数的位长)。

    一个八位字节 (0..255) 将占用 1 个字节。不需要分隔符或前导标志。

    一个 16 位 CRLF将占用 2 个字节。对于 C 和 C++,必须考虑底层架构。一个常见的 float在 32 位架构上将占用 4 个字节。针对 64 位体系结构编译的完全相同的代码将占用 8 个字节。

    这些平面规则也有异常(exception)。例如,Google 的 protobuf 使用利用可变长度编码的 zig-zag VarInt 实现。

    Here is a integer implementation in C/C++ .

    编辑 : 添加了 Thomas Weller 的建议

    超出实际文件 内容您必须存储有关文件的元数据(用于簿记,例如第一个扇区、文件名、访问权限等)。对于占用磁盘空间的文件,此元数据未显示,但实际上存在。

    如果将每个数字存储在单独的文件中,例如数字 VarInt在文件中 10 ,这些元数据条目将比数字本身占用更多的空间。

    如果您在一个文件中存储十、百、千或数百万/十亿个数字,则该开销变得越来越无关紧要。

    More about metadata here.

    编辑 : 更清楚地了解文件开销

    如上所述,开销在相关情况下是相关的。

    但这不是文本格式和二进制格式之间的区别。正如 doug65536 所说,无论您如何存储数据,如果文件系统结构相同,都没有关系。

    文件是一个文件,如果它包含二进制数据或 ASCII 文本,则它是独立的。

    尽管如此,上述推理独立于您选择的格式。

    关于file - 分别在二进制和文本文件中存储数字需要多少字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40057974/

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