数字的存储在计算机分为整数和浮点数存储,整数的话都是以二进制补码的形式存储,正数的补码是正数原码本身,负数的补码是原码的反码加1,而浮点数的存储就更为复杂了,包含符号位、基数位、阶码,以“符号位+基数+阶码”的形式存放(当然这只是个简单的模型,只是为了说明问题,基数本身是以补码的形式存放,而阶码就特殊点了,可以参看http://zhidao.baidu.com/question/213678614.html)
英文字符都是以ASCII码的形式存放,这是早期电脑中的数据存储形式,就是用1B(8位)来存放一个英文字符对应的ASCII码,最高位为0,但是现在的 *** 作系统中都是Unicode编码,即用2B来存放一个英文字符,高8位全为0,低8位为对应英文字符的ASCII编码.而汉字的编码也差不多,只不过一个汉字固定是用2B来存放的,一个汉字的编码高8位和低8位的第一个位都为1,汉字的编码有个区间【按照GB2312标准的汉字范围:0xB0A1(45217) - 0xF7FE(63486))】
图像和声音的编码更为复杂了,因为我们知道图片和声音文件有很多种后缀名(图像:例如.jpg/.png/.bmp等等.声音:.mp3/.wma/.wav等等)按照不同的后缀名会有不同的编码方式,即使是同一个后缀名也可能有多种编码方式,所以这个小点很不好回答.要简单先了解一下的话,你可以先看看图像中的.bmp文件是怎么编码成二进制文件的,这个主要编码方式是把图像当成一个点阵,每个点阵上有多位颜色,每一种颜色分别用一个的一定位数来编码(这个得根据颜色的多少来决定用多少位二进制数来编码,例如256色,真彩色等等),点阵的位置用一定位数来编码,对应的点阵位置上存放的就是对应颜色的编码(呵呵.有点复杂).
声音的话也跟图像编码类似,就指.wav声音文件来说,先把音轨按时间来划分,每隔一定的时间采样一次,隔的时间的倒数就是我们所说的采样频率.而我们是对每一个采到的声音进行编码,例如按照声波的振幅进行编码,不同的振幅对应不同的二进制编码,如振幅0对应00000000,这只是简单的说明一下.wav音频文件的编码。
二进制文件转换为文本文件是没有任何实际意义的.二进制文件和文本文件最根本的区别就是二进制文件在读写的时候系统不对文件进行任何处理而交由程序员处理,
而文本文件打开是先由 *** 作系统把文件中而在的\r\n转换为\n.
因为我们在c语言中写程序换行只有\n,
但是在windows *** 作系统中,
换行是\r\n,
是两字字节.
如果不作任何处理,
fgetc()
==
'\n'
遇到这类语句将会出现一些小错误,
导致文件读写失败.
所以在读的时候,
系统自动把文件中的\r\n变成\n,
写的时候把内存中的\n全部转换成\r\n.
至于为什么c语言用\n而windows用\r\n,
这是因为c语言是最早出现在linux系统中的,
而linux用的换行只有\n,
所以为了使代码可移植性较高,
在windows中编写c程序仍然使用\n,
程序员就不需要去在意这些细节问题了.
ultraedit软件将16进制文本转为二进制,下面方法可以解决:选中需要转换的数字,点击右键,选择“数字转换器”,选择需要转换的数字进制。UE会在转换完的数字前后,添加进制标识符号,以免被错。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)