还有,二进制文件比文本文件到底有什么好处啊?
44 个解决方案
#1
二进制文件和文本文件只是打开文件的方式而已,跟保存到磁盘里的文件没关系。
磁盘里的文件都是二进制格式的。
磁盘里的文件都是二进制格式的。
#2
那二进制文件比文本文件到底有什么好处啊?
#3
同意楼上的,如果LZ要节省空间的话,可以试着用哈夫曼等算法压缩一下~~~
#4
肯定节省空间
虽然磁盘里的文件都是二进制格式的
但是 要知道 数字格式以二进制保存的话 只需要保存实际值
文本格式却要无论如何占用一个字节当然 是unicode更麻烦
二进制文件的好处 自然是可以无差别对待输入数据流
虽然磁盘里的文件都是二进制格式的
但是 要知道 数字格式以二进制保存的话 只需要保存实际值
文本格式却要无论如何占用一个字节当然 是unicode更麻烦
二进制文件的好处 自然是可以无差别对待输入数据流
#5
当然 对楼主的用途 用二进制 没有多少改观的 还是用个简单的压缩算法 压缩一下吧
text文件 压缩效果和明显的
text文件 压缩效果和明显的
#6
多谢楼上各位的解答。采用压缩算法的话,我怕解压也耗时间,就会慢了。我的文本文件是有很多行的词条构成的,除了哈夫曼压缩,还有别的压缩算法吗?哪种压缩方法相对来说压缩大小和解压时间比较合适?
#7
因为再用这个词典的时候会进行查找操作
#8
5M大小根本算不上什么,用不着压缩,除非你的程序在特殊的电脑环境下运行。
储存为非文本文件,按照一定格式储存,你存取时会比较方便;如果用文本文件,在没有索引的情况下速度也比较慢。
还有一点,文本文件很容易被人看到内容,也容易被人修改。
储存为非文本文件,按照一定格式储存,你存取时会比较方便;如果用文本文件,在没有索引的情况下速度也比较慢。
还有一点,文本文件很容易被人看到内容,也容易被人修改。
#9
同意楼上的第一句话
o(∩_∩)o
o(∩_∩)o
#10
恩,确实需要压缩的啊^_^
储存为非文本文件,按照一定格式储存,你存取时会比较方便;
-------------------------------------------------
自己设计格式?可是大小还是不能压缩啊
储存为非文本文件,按照一定格式储存,你存取时会比较方便;
-------------------------------------------------
自己设计格式?可是大小还是不能压缩啊
#11
重复数据多就用行程
要么用霍夫曼
或者字典法
要么用霍夫曼
或者字典法
#12
你要的是内存空间大小还是硬盘空间大小?
#13
楼主所谓的二进制文件有很多种定义
1. 文件打开方式来说,有二进制打开方式和文本打开方式,其区别是文本方式会在读的时候把\n转换为\r\n,存储时做反向转换,而二进制方式则不作任何转换。
2. 存储方式:其实很多人说二进制文件是以为二进制文件是一种特殊的存储格式。而实际上这种所谓的特殊存储格式是不存在的。很多人以为电子开关有两种状态,因此文件存储都是以二进制方式存储的。其实这是一种把软件和硬件混淆起来的误解。当然电子文件最终都会转化为某种二值开关的状态,但是不能说文件是二进制的。实际上,从逻辑上讲,所有文件都以字节为单位存储,我们逻辑上应该把它当作一个字节数组,而不是某个二进制码流。
实际上,如果一定有一种和普通文本不一样的存储方式的话,我们应该说结构化存储。结构化存储文件用某种特殊的数据结构管理文件内的数据。例如:doc文件就是一种结构化存储文件,zip文件也是一种。每个结构化存储文件都需要用它特有的软件来打开,对应软件必须理解这种文件结构。例如:mspaint可以打开bmp文件,doc文件可以用winword打开。
一般而言,由于数据结构需要额外字节,这样的文件比普通文本文件要大。当然,由于使用了压缩算法,压缩会使得文件更小,但是如果没有压缩,应该更大才对。
结构化存储的好处是:1. 可以确保文件按照某种固定的逻辑存储 2. 读取速度快 3.支持逻辑上的插入(文件物理上不可插入)
至于楼主想压缩空间,首先对5M文件不值得,压缩解压缩是以时间换空间,而现在的潮流是以空间换时间,除非空间占有率太大,而5M显然不大。
1. 文件打开方式来说,有二进制打开方式和文本打开方式,其区别是文本方式会在读的时候把\n转换为\r\n,存储时做反向转换,而二进制方式则不作任何转换。
2. 存储方式:其实很多人说二进制文件是以为二进制文件是一种特殊的存储格式。而实际上这种所谓的特殊存储格式是不存在的。很多人以为电子开关有两种状态,因此文件存储都是以二进制方式存储的。其实这是一种把软件和硬件混淆起来的误解。当然电子文件最终都会转化为某种二值开关的状态,但是不能说文件是二进制的。实际上,从逻辑上讲,所有文件都以字节为单位存储,我们逻辑上应该把它当作一个字节数组,而不是某个二进制码流。
实际上,如果一定有一种和普通文本不一样的存储方式的话,我们应该说结构化存储。结构化存储文件用某种特殊的数据结构管理文件内的数据。例如:doc文件就是一种结构化存储文件,zip文件也是一种。每个结构化存储文件都需要用它特有的软件来打开,对应软件必须理解这种文件结构。例如:mspaint可以打开bmp文件,doc文件可以用winword打开。
一般而言,由于数据结构需要额外字节,这样的文件比普通文本文件要大。当然,由于使用了压缩算法,压缩会使得文件更小,但是如果没有压缩,应该更大才对。
结构化存储的好处是:1. 可以确保文件按照某种固定的逻辑存储 2. 读取速度快 3.支持逻辑上的插入(文件物理上不可插入)
至于楼主想压缩空间,首先对5M文件不值得,压缩解压缩是以时间换空间,而现在的潮流是以空间换时间,除非空间占有率太大,而5M显然不大。
#14
从某种意义上可以这么说
#15
如果是字典,还是去研究一下数据结构,以结构化存储方式存储,因为这可以对你的字典进行index/hash,加快查字典速度。这不过不是简单的事情,三言两语说不清,不太适合在这样的网站问哦:)
#16
受益了
#17
4 楼说的很有趣,怎么保存实际的值?文件永远是以字节为单位的
#18
楼上的说的太有趣了 呵呵
文件以字节为单位就不能保存实际值了么?
建议楼主好好学学基本功吧 呵呵
别误导了楼主呢
事实胜于雄辩 来看看这段测试程序吧
比较下 asc文件大小 和bin文件大小就知道了 呵呵
文件以字节为单位就不能保存实际值了么?
建议楼主好好学学基本功吧 呵呵
别误导了楼主呢
事实胜于雄辩 来看看这段测试程序吧
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
long i = 9999999;
fp = fopen("bin.txt","wb");
fwrite(&i,sizeof(i),1,fp);
fclose(fp);
fp = fopen("asc.txt","wt");
fprintf(fp,"%d",i);
fclose(fp);
system("pause");
}
比较下 asc文件大小 和bin文件大小就知道了 呵呵
#19
在提醒下楼上的 别吧 以字节为最小计量单位跟以字节为存储方式混淆了
当然 我昵称是 Super N-o.O-B 呵呵
超级菜鸟 初学语言 错误之处 还望海涵
当然 我昵称是 Super N-o.O-B 呵呵
超级菜鸟 初学语言 错误之处 还望海涵
#20
strangefay
要说常见的二进制(或曰:结构化)存储,看看所谓的TLV格式、XDR格式和ASN.1吧。你的代码在复杂情况下没有任何实际的意义。结果甚至可以随着i值的不同而变化,不具有说明意义。
要说常见的二进制(或曰:结构化)存储,看看所谓的TLV格式、XDR格式和ASN.1吧。你的代码在复杂情况下没有任何实际的意义。结果甚至可以随着i值的不同而变化,不具有说明意义。
#21
对不起 楼上的星级用户
没有学那么深 学c语言还没一个月 呵呵
佩服您了 但是 我只讨论C语言的二进制存储 不见得 二进制存储都指的是结构化存储吧 呵呵
我只想问一句 可以存储整形的实际值不?
菜鸟入门 让您见笑了 呵呵
没有学那么深 学c语言还没一个月 呵呵
佩服您了 但是 我只讨论C语言的二进制存储 不见得 二进制存储都指的是结构化存储吧 呵呵
我只想问一句 可以存储整形的实际值不?
菜鸟入门 让您见笑了 呵呵
#22
TLV的意思就是:Type类型, Lenght长度,Value值;
Type和Length的长度固定,一般那是2、4个字节;
Value的长度有Length指定;
解析方法:
1.读取type 转换为ntohl、ntohs转换为主机字节序得到类型;指针偏移+2或4
2.读取lenght,转换为ntohl、ntohs转换为主机字节序得到长度;指针偏移+2或4
3.根据得到的长度读取value,指针偏移+Length;
。。。。
继续处理后面的tlv;
--------------------------------------------------------
抽象语法标记(Abstract Syntax Notation One)是描述抽象类型和值的标记,缩写为ASN.1。
在ASN.1中,一个类型就是值的一个集合。有些类型有有限个值,有些则有无限多个。一个给定的ASN.1类型的值是该类型集合里的一个元素。ASN.1有四种类型:简单类型,它相当于原子,没有下层组件;结构类型,有组成部分;标签类型,由其它类型生成;其它类型,包括CHOICE和ANY类型。可以使用ASN.1的分配符(::=)给类型和值指定名字,这些名字可以用于定义其它类型或值。
---------------------------------------------------------
XDR(eXternal Data Representation) 提供一种方法把数据从一种格式转换成另一种标准数据格式表示法,确保在不同的电脑,操作系统及电脑语言中,所有数据代表的意义都是相同的。
Type和Length的长度固定,一般那是2、4个字节;
Value的长度有Length指定;
解析方法:
1.读取type 转换为ntohl、ntohs转换为主机字节序得到类型;指针偏移+2或4
2.读取lenght,转换为ntohl、ntohs转换为主机字节序得到长度;指针偏移+2或4
3.根据得到的长度读取value,指针偏移+Length;
。。。。
继续处理后面的tlv;
--------------------------------------------------------
抽象语法标记(Abstract Syntax Notation One)是描述抽象类型和值的标记,缩写为ASN.1。
在ASN.1中,一个类型就是值的一个集合。有些类型有有限个值,有些则有无限多个。一个给定的ASN.1类型的值是该类型集合里的一个元素。ASN.1有四种类型:简单类型,它相当于原子,没有下层组件;结构类型,有组成部分;标签类型,由其它类型生成;其它类型,包括CHOICE和ANY类型。可以使用ASN.1的分配符(::=)给类型和值指定名字,这些名字可以用于定义其它类型或值。
---------------------------------------------------------
XDR(eXternal Data Representation) 提供一种方法把数据从一种格式转换成另一种标准数据格式表示法,确保在不同的电脑,操作系统及电脑语言中,所有数据代表的意义都是相同的。
#23
18 楼说的和我说的根本不时一回事情哦:)数和其格式化后的字符串根本不是同一个东西,因此你比较它们俩没有意义的:)
#24
不好意思 理解错误 呵呵
楼上大侠见笑了
楼上大侠见笑了
#25
TLV XDR ASN.1
.............. 20楼的做网络的? 这是什么地方学的啊。。
老师没教这个。。。。
受教受教。。。。。。。。。
.............. 20楼的做网络的? 这是什么地方学的啊。。
老师没教这个。。。。
受教受教。。。。。。。。。
#26
5m的txt文件,如果不用压缩算法,没法变小存下。而且上面很多人已经说了,5M其实不算大。
二进制文件和文本文件是不同的文件类型,一个是用来表示二进制数据的,比如视频,程序文件。一个是用来表示文本的,
你的本来就是文本文件,转存成二进制还需要做转换,又不能节省空间,没什么必要吧?
二进制文件和文本文件是不同的文件类型,一个是用来表示二进制数据的,比如视频,程序文件。一个是用来表示文本的,
你的本来就是文本文件,转存成二进制还需要做转换,又不能节省空间,没什么必要吧?
#27
还是找个数据库用吧,连字典的搜索算法都不用写了。
#28
说压缩算法就想起 DNS Message 中用的压缩算法。。如果有大量重复的词条,可以借鉴。
#29
学习,留名
#30
没有一个前提条件,没有可比性
#31
这个问题真够基础的。。
#32
lz抛砖引玉啊 学习
#33
1.存储字符时,二进制和文本占用的空间应该是一样的.
在存储数据时,二进制占用存储空间小,比如double型数据,按照IEEE754占8个字节,若用文本模式,同等精度,占用字节数会增加.
2.文本文件一般以流的模式存储,地址的概念不明确,由于其可读性强(易于修改),也不适用于用地址来标明位置,在存储方面不易于利于设计良好的数据结构.
二进制文件,地址概念非常明确,在良好的数据结构的基础上较文本文件不但可以节省空间,还更适合于应用数据结构的思想来进行查询操作等.数据库便是一个最好的例子.
对于字典来说,第一方面不容易体现,第二方面需要一个良好的设计为基础.
总体来说,良好的二进制文件较文本文件更容易存储更多的数据.
在存储数据时,二进制占用存储空间小,比如double型数据,按照IEEE754占8个字节,若用文本模式,同等精度,占用字节数会增加.
2.文本文件一般以流的模式存储,地址的概念不明确,由于其可读性强(易于修改),也不适用于用地址来标明位置,在存储方面不易于利于设计良好的数据结构.
二进制文件,地址概念非常明确,在良好的数据结构的基础上较文本文件不但可以节省空间,还更适合于应用数据结构的思想来进行查询操作等.数据库便是一个最好的例子.
对于字典来说,第一方面不容易体现,第二方面需要一个良好的设计为基础.
总体来说,良好的二进制文件较文本文件更容易存储更多的数据.
#34
同意LS
#35
不知道LZ怎么定义的文件存储格式,可以用压缩工具试一下,看看有没有效果
#36
oo
#37
暈。
#38
晕,5M还想压缩
这种工作没意义啊
这种工作没意义啊
#39
建议用MDB数据库,
如果文本文件用在网络上,找一个你使用对应程序的ZIP压缩算法,网上很多。
如果文本文件用在网络上,找一个你使用对应程序的ZIP压缩算法,网上很多。
#40
在32位机器上,int数据类型的长度是4个字节,那么要存储100001,100002,100003,100004,100005,100006这6个数,当使用二进制时只要用4*6=24个字节就够了,但是用文本方式(用记事本打开可读的),则每个数要占6个字节,并且,要想人们看上到舒服一点的话,还可以排一下格式,比如用逗号分格,或者每个数占一行.当然了,如果是存1,2,3,4,5,6这6个数,那么文本方式每个数只要一个字节就够了.
怎么越说越乱呀.....看看18楼的程序的结果就知道了.
怎么越说越乱呀.....看看18楼的程序的结果就知道了.
#41
可以用gzip 压缩一下,像stardict这种软件的词典就是用gzip压缩的纯文本做辞典。效果很明显,算法也简单。
#42
打文字转换成十进制再存取会不会占空间少点?
#43
学习下~~
#44
学习了~
#1
二进制文件和文本文件只是打开文件的方式而已,跟保存到磁盘里的文件没关系。
磁盘里的文件都是二进制格式的。
磁盘里的文件都是二进制格式的。
#2
那二进制文件比文本文件到底有什么好处啊?
#3
同意楼上的,如果LZ要节省空间的话,可以试着用哈夫曼等算法压缩一下~~~
#4
肯定节省空间
虽然磁盘里的文件都是二进制格式的
但是 要知道 数字格式以二进制保存的话 只需要保存实际值
文本格式却要无论如何占用一个字节当然 是unicode更麻烦
二进制文件的好处 自然是可以无差别对待输入数据流
虽然磁盘里的文件都是二进制格式的
但是 要知道 数字格式以二进制保存的话 只需要保存实际值
文本格式却要无论如何占用一个字节当然 是unicode更麻烦
二进制文件的好处 自然是可以无差别对待输入数据流
#5
当然 对楼主的用途 用二进制 没有多少改观的 还是用个简单的压缩算法 压缩一下吧
text文件 压缩效果和明显的
text文件 压缩效果和明显的
#6
多谢楼上各位的解答。采用压缩算法的话,我怕解压也耗时间,就会慢了。我的文本文件是有很多行的词条构成的,除了哈夫曼压缩,还有别的压缩算法吗?哪种压缩方法相对来说压缩大小和解压时间比较合适?
#7
因为再用这个词典的时候会进行查找操作
#8
5M大小根本算不上什么,用不着压缩,除非你的程序在特殊的电脑环境下运行。
储存为非文本文件,按照一定格式储存,你存取时会比较方便;如果用文本文件,在没有索引的情况下速度也比较慢。
还有一点,文本文件很容易被人看到内容,也容易被人修改。
储存为非文本文件,按照一定格式储存,你存取时会比较方便;如果用文本文件,在没有索引的情况下速度也比较慢。
还有一点,文本文件很容易被人看到内容,也容易被人修改。
#9
同意楼上的第一句话
o(∩_∩)o
o(∩_∩)o
#10
恩,确实需要压缩的啊^_^
储存为非文本文件,按照一定格式储存,你存取时会比较方便;
-------------------------------------------------
自己设计格式?可是大小还是不能压缩啊
储存为非文本文件,按照一定格式储存,你存取时会比较方便;
-------------------------------------------------
自己设计格式?可是大小还是不能压缩啊
#11
重复数据多就用行程
要么用霍夫曼
或者字典法
要么用霍夫曼
或者字典法
#12
你要的是内存空间大小还是硬盘空间大小?
#13
楼主所谓的二进制文件有很多种定义
1. 文件打开方式来说,有二进制打开方式和文本打开方式,其区别是文本方式会在读的时候把\n转换为\r\n,存储时做反向转换,而二进制方式则不作任何转换。
2. 存储方式:其实很多人说二进制文件是以为二进制文件是一种特殊的存储格式。而实际上这种所谓的特殊存储格式是不存在的。很多人以为电子开关有两种状态,因此文件存储都是以二进制方式存储的。其实这是一种把软件和硬件混淆起来的误解。当然电子文件最终都会转化为某种二值开关的状态,但是不能说文件是二进制的。实际上,从逻辑上讲,所有文件都以字节为单位存储,我们逻辑上应该把它当作一个字节数组,而不是某个二进制码流。
实际上,如果一定有一种和普通文本不一样的存储方式的话,我们应该说结构化存储。结构化存储文件用某种特殊的数据结构管理文件内的数据。例如:doc文件就是一种结构化存储文件,zip文件也是一种。每个结构化存储文件都需要用它特有的软件来打开,对应软件必须理解这种文件结构。例如:mspaint可以打开bmp文件,doc文件可以用winword打开。
一般而言,由于数据结构需要额外字节,这样的文件比普通文本文件要大。当然,由于使用了压缩算法,压缩会使得文件更小,但是如果没有压缩,应该更大才对。
结构化存储的好处是:1. 可以确保文件按照某种固定的逻辑存储 2. 读取速度快 3.支持逻辑上的插入(文件物理上不可插入)
至于楼主想压缩空间,首先对5M文件不值得,压缩解压缩是以时间换空间,而现在的潮流是以空间换时间,除非空间占有率太大,而5M显然不大。
1. 文件打开方式来说,有二进制打开方式和文本打开方式,其区别是文本方式会在读的时候把\n转换为\r\n,存储时做反向转换,而二进制方式则不作任何转换。
2. 存储方式:其实很多人说二进制文件是以为二进制文件是一种特殊的存储格式。而实际上这种所谓的特殊存储格式是不存在的。很多人以为电子开关有两种状态,因此文件存储都是以二进制方式存储的。其实这是一种把软件和硬件混淆起来的误解。当然电子文件最终都会转化为某种二值开关的状态,但是不能说文件是二进制的。实际上,从逻辑上讲,所有文件都以字节为单位存储,我们逻辑上应该把它当作一个字节数组,而不是某个二进制码流。
实际上,如果一定有一种和普通文本不一样的存储方式的话,我们应该说结构化存储。结构化存储文件用某种特殊的数据结构管理文件内的数据。例如:doc文件就是一种结构化存储文件,zip文件也是一种。每个结构化存储文件都需要用它特有的软件来打开,对应软件必须理解这种文件结构。例如:mspaint可以打开bmp文件,doc文件可以用winword打开。
一般而言,由于数据结构需要额外字节,这样的文件比普通文本文件要大。当然,由于使用了压缩算法,压缩会使得文件更小,但是如果没有压缩,应该更大才对。
结构化存储的好处是:1. 可以确保文件按照某种固定的逻辑存储 2. 读取速度快 3.支持逻辑上的插入(文件物理上不可插入)
至于楼主想压缩空间,首先对5M文件不值得,压缩解压缩是以时间换空间,而现在的潮流是以空间换时间,除非空间占有率太大,而5M显然不大。
#14
从某种意义上可以这么说
#15
如果是字典,还是去研究一下数据结构,以结构化存储方式存储,因为这可以对你的字典进行index/hash,加快查字典速度。这不过不是简单的事情,三言两语说不清,不太适合在这样的网站问哦:)
#16
受益了
#17
4 楼说的很有趣,怎么保存实际的值?文件永远是以字节为单位的
#18
楼上的说的太有趣了 呵呵
文件以字节为单位就不能保存实际值了么?
建议楼主好好学学基本功吧 呵呵
别误导了楼主呢
事实胜于雄辩 来看看这段测试程序吧
比较下 asc文件大小 和bin文件大小就知道了 呵呵
文件以字节为单位就不能保存实际值了么?
建议楼主好好学学基本功吧 呵呵
别误导了楼主呢
事实胜于雄辩 来看看这段测试程序吧
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
long i = 9999999;
fp = fopen("bin.txt","wb");
fwrite(&i,sizeof(i),1,fp);
fclose(fp);
fp = fopen("asc.txt","wt");
fprintf(fp,"%d",i);
fclose(fp);
system("pause");
}
比较下 asc文件大小 和bin文件大小就知道了 呵呵
#19
在提醒下楼上的 别吧 以字节为最小计量单位跟以字节为存储方式混淆了
当然 我昵称是 Super N-o.O-B 呵呵
超级菜鸟 初学语言 错误之处 还望海涵
当然 我昵称是 Super N-o.O-B 呵呵
超级菜鸟 初学语言 错误之处 还望海涵
#20
strangefay
要说常见的二进制(或曰:结构化)存储,看看所谓的TLV格式、XDR格式和ASN.1吧。你的代码在复杂情况下没有任何实际的意义。结果甚至可以随着i值的不同而变化,不具有说明意义。
要说常见的二进制(或曰:结构化)存储,看看所谓的TLV格式、XDR格式和ASN.1吧。你的代码在复杂情况下没有任何实际的意义。结果甚至可以随着i值的不同而变化,不具有说明意义。
#21
对不起 楼上的星级用户
没有学那么深 学c语言还没一个月 呵呵
佩服您了 但是 我只讨论C语言的二进制存储 不见得 二进制存储都指的是结构化存储吧 呵呵
我只想问一句 可以存储整形的实际值不?
菜鸟入门 让您见笑了 呵呵
没有学那么深 学c语言还没一个月 呵呵
佩服您了 但是 我只讨论C语言的二进制存储 不见得 二进制存储都指的是结构化存储吧 呵呵
我只想问一句 可以存储整形的实际值不?
菜鸟入门 让您见笑了 呵呵
#22
TLV的意思就是:Type类型, Lenght长度,Value值;
Type和Length的长度固定,一般那是2、4个字节;
Value的长度有Length指定;
解析方法:
1.读取type 转换为ntohl、ntohs转换为主机字节序得到类型;指针偏移+2或4
2.读取lenght,转换为ntohl、ntohs转换为主机字节序得到长度;指针偏移+2或4
3.根据得到的长度读取value,指针偏移+Length;
。。。。
继续处理后面的tlv;
--------------------------------------------------------
抽象语法标记(Abstract Syntax Notation One)是描述抽象类型和值的标记,缩写为ASN.1。
在ASN.1中,一个类型就是值的一个集合。有些类型有有限个值,有些则有无限多个。一个给定的ASN.1类型的值是该类型集合里的一个元素。ASN.1有四种类型:简单类型,它相当于原子,没有下层组件;结构类型,有组成部分;标签类型,由其它类型生成;其它类型,包括CHOICE和ANY类型。可以使用ASN.1的分配符(::=)给类型和值指定名字,这些名字可以用于定义其它类型或值。
---------------------------------------------------------
XDR(eXternal Data Representation) 提供一种方法把数据从一种格式转换成另一种标准数据格式表示法,确保在不同的电脑,操作系统及电脑语言中,所有数据代表的意义都是相同的。
Type和Length的长度固定,一般那是2、4个字节;
Value的长度有Length指定;
解析方法:
1.读取type 转换为ntohl、ntohs转换为主机字节序得到类型;指针偏移+2或4
2.读取lenght,转换为ntohl、ntohs转换为主机字节序得到长度;指针偏移+2或4
3.根据得到的长度读取value,指针偏移+Length;
。。。。
继续处理后面的tlv;
--------------------------------------------------------
抽象语法标记(Abstract Syntax Notation One)是描述抽象类型和值的标记,缩写为ASN.1。
在ASN.1中,一个类型就是值的一个集合。有些类型有有限个值,有些则有无限多个。一个给定的ASN.1类型的值是该类型集合里的一个元素。ASN.1有四种类型:简单类型,它相当于原子,没有下层组件;结构类型,有组成部分;标签类型,由其它类型生成;其它类型,包括CHOICE和ANY类型。可以使用ASN.1的分配符(::=)给类型和值指定名字,这些名字可以用于定义其它类型或值。
---------------------------------------------------------
XDR(eXternal Data Representation) 提供一种方法把数据从一种格式转换成另一种标准数据格式表示法,确保在不同的电脑,操作系统及电脑语言中,所有数据代表的意义都是相同的。
#23
18 楼说的和我说的根本不时一回事情哦:)数和其格式化后的字符串根本不是同一个东西,因此你比较它们俩没有意义的:)
#24
不好意思 理解错误 呵呵
楼上大侠见笑了
楼上大侠见笑了
#25
TLV XDR ASN.1
.............. 20楼的做网络的? 这是什么地方学的啊。。
老师没教这个。。。。
受教受教。。。。。。。。。
.............. 20楼的做网络的? 这是什么地方学的啊。。
老师没教这个。。。。
受教受教。。。。。。。。。
#26
5m的txt文件,如果不用压缩算法,没法变小存下。而且上面很多人已经说了,5M其实不算大。
二进制文件和文本文件是不同的文件类型,一个是用来表示二进制数据的,比如视频,程序文件。一个是用来表示文本的,
你的本来就是文本文件,转存成二进制还需要做转换,又不能节省空间,没什么必要吧?
二进制文件和文本文件是不同的文件类型,一个是用来表示二进制数据的,比如视频,程序文件。一个是用来表示文本的,
你的本来就是文本文件,转存成二进制还需要做转换,又不能节省空间,没什么必要吧?
#27
还是找个数据库用吧,连字典的搜索算法都不用写了。
#28
说压缩算法就想起 DNS Message 中用的压缩算法。。如果有大量重复的词条,可以借鉴。
#29
学习,留名
#30
没有一个前提条件,没有可比性
#31
这个问题真够基础的。。
#32
lz抛砖引玉啊 学习
#33
1.存储字符时,二进制和文本占用的空间应该是一样的.
在存储数据时,二进制占用存储空间小,比如double型数据,按照IEEE754占8个字节,若用文本模式,同等精度,占用字节数会增加.
2.文本文件一般以流的模式存储,地址的概念不明确,由于其可读性强(易于修改),也不适用于用地址来标明位置,在存储方面不易于利于设计良好的数据结构.
二进制文件,地址概念非常明确,在良好的数据结构的基础上较文本文件不但可以节省空间,还更适合于应用数据结构的思想来进行查询操作等.数据库便是一个最好的例子.
对于字典来说,第一方面不容易体现,第二方面需要一个良好的设计为基础.
总体来说,良好的二进制文件较文本文件更容易存储更多的数据.
在存储数据时,二进制占用存储空间小,比如double型数据,按照IEEE754占8个字节,若用文本模式,同等精度,占用字节数会增加.
2.文本文件一般以流的模式存储,地址的概念不明确,由于其可读性强(易于修改),也不适用于用地址来标明位置,在存储方面不易于利于设计良好的数据结构.
二进制文件,地址概念非常明确,在良好的数据结构的基础上较文本文件不但可以节省空间,还更适合于应用数据结构的思想来进行查询操作等.数据库便是一个最好的例子.
对于字典来说,第一方面不容易体现,第二方面需要一个良好的设计为基础.
总体来说,良好的二进制文件较文本文件更容易存储更多的数据.
#34
同意LS
#35
不知道LZ怎么定义的文件存储格式,可以用压缩工具试一下,看看有没有效果
#36
oo
#37
暈。
#38
晕,5M还想压缩
这种工作没意义啊
这种工作没意义啊
#39
建议用MDB数据库,
如果文本文件用在网络上,找一个你使用对应程序的ZIP压缩算法,网上很多。
如果文本文件用在网络上,找一个你使用对应程序的ZIP压缩算法,网上很多。
#40
在32位机器上,int数据类型的长度是4个字节,那么要存储100001,100002,100003,100004,100005,100006这6个数,当使用二进制时只要用4*6=24个字节就够了,但是用文本方式(用记事本打开可读的),则每个数要占6个字节,并且,要想人们看上到舒服一点的话,还可以排一下格式,比如用逗号分格,或者每个数占一行.当然了,如果是存1,2,3,4,5,6这6个数,那么文本方式每个数只要一个字节就够了.
怎么越说越乱呀.....看看18楼的程序的结果就知道了.
怎么越说越乱呀.....看看18楼的程序的结果就知道了.
#41
可以用gzip 压缩一下,像stardict这种软件的词典就是用gzip压缩的纯文本做辞典。效果很明显,算法也简单。
#42
打文字转换成十进制再存取会不会占空间少点?
#43
学习下~~
#44
学习了~