c#保存二进制编码,是存储空间最小的方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#保存二进制编码,是存储空间最小的方法?相关的知识,希望对你有一定的参考价值。

c#用BinaryWriter等只能写入一个string类型的,有什么能用较小的空间保存这个二进制串(或者用二进制保存一段数据,如一个对象数组)?(提供一个具体的函数。)

c#用BinaryWriter等只能写入一个string类型的,有什么能用较小的空间保存这个二进制串(或者用二进制保存一段数据,如一个对象数组)?

楼主.你确定你明白你在做什么么..
如果你这么做不但不会加快或者所要使用内存的空间.反而会增大.
首先.STRING自己占一些..你用二进制..他还是要分空间..
这些放开不说

把STRING转化为二进制.不管怎么转.他仍旧占用了原本的空间.
甚至更多
原因也很简单.
你的二进制是一个数组.他可能需要用N个位置来存一个STRING字符..你觉得..哪个大?
尤其是中文哦~
所谓较小空间.就要关系到压缩了.
你可以尝试使用系统自带的ZIP压缩机制即可
参考技术A 二进制序列化,BinaryFormatter,不过还不是最小的,google的一个二进制序列化算法是最小的追问

序列化还是比较管用。
我现在有一串纯01二进制码串(非常长),想找出一个尽量小的存储方法。

追答

那只能压缩

参考技术B 利用Json可以把对象转换到符串,然后把字符串转成二进制,或者直接进行7Z压缩。
简单至极
参考技术C 不知道是不是最小,但是应该是程序处理最快的

字节和编码

计算机存储最小单元 bit,表示 0 或者 1

8 个 bit (00000000 ~ 11111111)共 256 种状态,构成 byte(字节)

 

ASCII 码共 128 个字符编码,使用 1 个字节保存,第一位为 0

 

Unicode 符号集,规定了每个符号的二进制代码,但没有规定其存储方式(用几个字节存储)

 

UTF-8 是 Unicode 的一种实现,是一种变长的实现方式,使用 1~4 字节表示一个符号

编码规则

  • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的
  • 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码
Unicode符号范围(十六进制) UTF-8编码方式(二进制)
0000 0000 ~ 0000 007F 0xxxxxxx
0000 0080 ~ 0000 07FF 110xxxxx 10xxxxxx
0000 0800 ~ 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000 ~ 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

 

 

 

 

 

比如 高 这个符号,Unicode 值是 9AD8,在 0000 0800 ~ 0000 FFFF 范围内,使用 3 字节(1110xxxx 10xxxxxx 10xxxxxx)存储,9AD8 的二进制值为 1001 1010 1101 1000,从最后一位二进制值开始从后往前填补 x 值,即为:11101001 10101011 10011000,转为十六进制为:F9AB98,所以 高 的 UTF-8 值为 E9AB98

 

参考链接:

字符编码笔记:ASCII,Unicode 和 UTF-8

字符,字节和编码

 

以上是关于c#保存二进制编码,是存储空间最小的方法?的主要内容,如果未能解决你的问题,请参考以下文章

变量名,变量值和内存地址,这三者在内存中是以某种编码方式存储在同一块空间里吗

计算机基础存储单位换算

python3随记——字符编码

遗传算法的基本原理

字节,字符,byte,bit

内存地址与内存空间