【问题标题】:Is it possible to convert 16bit binary number to two characters and save it to text file?是否可以将 16 位二进制数转换为两个字符并将其保存到文本文件中?
【发布时间】:2017-05-15 09:21:59
【问题描述】:

我想将一些信息保存到文本文件(.txt 格式)。为了减小文件大小,我使用一个 16 位二进制数的每一位来表示一些信息。例如,对于一个 16 位二进制数0000 0001 1000 1111,每个位都有其特定的含义。由于任何 ASCII 字符都等于 8 位二进制数,所以我想将我的 16 位数字转换为两个字符并保存:

uint16_t a;
a = 13 << 10 | 1 << 3 | 2;// a is a 16bit binary number
char b, c;
b = (char)(a>>8);
c = (char)a;// convert a to two characters

然后我将 b 和 c 保存到一个文本文件中。稍后阅读文本文件时,我会将这两个字符转换为 16 位二进制数并获取信息。问题是我知道有些 ASCII 字符是不可打印的,所以我想知道是否有什么问题?任何答案将不胜感激!

【问题讨论】:

  • 不可打印字符只有在您尝试打印时才会出现问题。或者通过一些只能处理可打印字符的系统运行文件。只要每个人都将文件视为二进制数据(你不应该真正称之为 ASCII ——顺便说一下,它只有 7 位)一切都很好。
  • 感谢您的回答!我会将字符保存到 txt 文件中,然后我将使用软件对其进行压缩,例如 winzip。我不确定是否可以这样做。
  • 我认为如果你把它称为二进制文件并给它一个不同的扩展名,比如“.bin”,它会避免很多混乱。有什么理由你不能吗?

标签: text-files ascii binaryfiles compression


【解决方案1】:

这应该不是问题。文件是文本还是二进制文件,或者只是一个约定。这完全取决于程序如何解释数据。当您打开 UTF-32 编码的文本文件时,即使数据是“文本”,不支持 unicode 的文本编辑器也会显示乱码。与您的程序类似。你可以用 .jpg 命名文件,只要你的程序知道如何处理它就可以了。

请务必以二进制模式读取和写入。一些编程语言对“文本模式”进行少量处理,例如用平台的换行符替换换行符。

【讨论】:

  • 感谢您的回答!另一个问题,如果我将字符保存为 .txt 文件,那么我将使用软件(例如,winzip)对其进行压缩。当我读取文件时,我会先将其解压缩,然后将字符转换为 16 位二进制数。我认为有可能做到这一点?
  • 您刚刚描述了如何做到这一点,所以这绝对是可能的:)。要考虑的一件事是winzip对文本文件的任何特殊处理。它应该足够聪明,不要只看扩展,但如果你发现任何设置来禁用它,那就太好了。
猜你喜欢
  • 2015-03-22
  • 2018-11-25
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
相关资源
最近更新 更多