是否可以将 16 位二进制数转换为两个字符并将其保存到文本文件中?

Posted

技术标签:

【中文标题】是否可以将 16 位二进制数转换为两个字符并将其保存到文本文件中?【英文标题】:Is it possible to convert 16bit binary number to two characters and save it to text file? 【发布时间】: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”,它会避免很多混乱。有什么理由你不能吗? 【参考方案1】:

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

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

【讨论】:

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

以上是关于是否可以将 16 位二进制数转换为两个字符并将其保存到文本文件中?的主要内容,如果未能解决你的问题,请参考以下文章

16位二进制数怎么转换为BCD码

C语言如何把11位16进制字符串转成16进制数?

将 int16 转换为 16 位大端二进制

用Python 3.1.3 写几个进制转换的程序

Java中将字符串与unicode的相互转换工具类

将一个 32 位浮点数转换为两个 16 位 uint 数,然后再次转换回该 32 位浮点数