二进制文件Fortran读写专题
- 格式:pdf
- 大小:1.47 MB
- 文档页数:18
先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。
二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。
下面我们看看一个拷贝程序的源码:2中,注意fread的返回值,这个值需要在fwrite的时候将会用到。
后面是关于fopen,fread,fwrite三个函数的详细说明。
fopen(打开文件)相关函数open,fclose表头文件#include<stdio.h>定义函数FILE * fopen(const char * path,const char * mode);函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。
若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。
若文件不存在则建立该文件。
a 以附加的方式打开只写文件。
若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。
若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
不过在POSIX系统,包含Linux都会忽略该字符。
由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
返回值文件顺利打开后,指向该流的文件指针就会被返回。
二进制文件读写分析有关TXT文件以及bin文件处理的测试代码int main(){//fstreamfile("D:\\test.dat",ios_base::in|ios_base::out|ios_base::app);fstream file;file.open("D:\\test1.dat",ios_base::out);{int temp[10] ={0x11,0x13,0x14,0x1F,0x1D,0x11,0x11,0x12,0x11,0x11};int temp1[10];file.write((char *)temp,sizeof(temp));file.close();file.open("D:\\test1.dat",ios_base::in);file.read((char *)temp,sizeof(temp));unsigned int i;cout<<sizeof(temp)<<endl;for(i = 0;i < sizeof(temp)/sizeof(unsigned int);i++){temp1[i] = temp[i];cout<<temp[i]<<endl;}file.close();file.open("D:\\test1.dat",ios_base::out);temp1[6] = 0x16;file.write((char *)temp1,sizeof(temp));file.close();}file.open("D:\\test1.dat",ios_base::out|ios_base::app);unsigned char temp[10] = {'a','b','a','a','a','d','a','C','a','a'}; test *test1 = (test *)malloc(sizeof(test));test1->projectId = 'U';test1->password = 0x12;for(int i = 0;i < 10;i ++){test1->someThings[i] = temp[i];}test1->sm = (unsigned long)0x41;test1->fuck = 'M';file.write((char *)test1,sizeof(test));file.close();test *test2 = (test *)malloc(sizeof(test));file.open("D:\\test1.dat",ios_base::in);file.seekg(0x28);file.read((char *)test2,sizeof(test));for(int i = 0;i < 10;i ++){cout<<test2->someThings[i]<<endl;}file.close();return 0;}有关bin文件处理的测试笔记<1> 我一直以为自己很熟悉如何使用C/C++中的二进制文件,可今天测试的时候突然发现程序生成的二进制文件和文本文件一样。
fortran用法总结我的Fortran基本用法小结周日, 10/14/2007 - 21:00 — gator一、说明二、概述三、数据类型及基本输入输出四、流程控制五、循环六、数组七、函数八、文件一、说明本文多数内容是我读彭国伦《Fortran 95 程序设计》的笔记。
只读到第九章,主要是3~9章,都是最基本的用法(原书共16章)。
这里主要摘录了我看书过程中总结的一些Fortran和C不同的地方,主要是语法方面。
希望这份笔记能够给学过C但没有接触过Fortran的同学带去一些帮助。
要想得更清楚些,推荐看一下原书,觉得作者真的写得很好,很清楚;如果有C语言的基础,看完前九应该很快的,花一两天就行了。
觉得如果耐心看完本文,基本功能应该也可以顺利用起来了。
外,由于我之前没有用过Fortran,这次为了赶文档看书又看得很粗浅,大多数东西看过之后都没得及仔细想,只是按着作者的意思去理解。
所以这份笔记还处于纸上谈兵的层次。
如果有不妥的方,希望大家指正。
谢谢!文中蓝色的部分是程序代码,!后面的内容为注释。
二、概述1、名词解释Fortran=For mula Tran slator/Translation一看就知道有什么特色了:可以把接近数学语言的文本翻译成机械语言。
的确,从一开始,IBM设计的时候就是为了方便数值计算和科学数据处理。
设计强大的数组操作就是为了实现这一目标。
ortran奠定了高级语言发展的基础。
现在Fortran在科研和机械方面应用很广。
2、Fortran的主要版本及差别按其发展历史,Fortran编译器的版本其实很多。
现在在广泛使用的是Fortran 77和Fortran90。
ortran 90在Fortran 77基础上添加了不少使用的功能,并且改良了77编程的版面格式,所以编程时推荐使用90。
鉴于很多现成的程序只有77版本,有必要知道77的一些基本常识,至少保证能够看77程序。
以下是77和90的一些格式上的区别。
6 Fortran 程序设计6-文件6 Fortran 程序设计6-文件在Fortran编程中,文件操作是非常重要的一部分。
通过文件操作,我们可以方便地读取和写入数据,对数据进行处理和分析。
本文将介绍Fortran中的文件操作相关内容。
1. 文件的概念和分类文件是计算机中用来存储数据的一种存储介质,可以是硬盘、光盘或其他存储设备。
在Fortran中,常见的文件类型包括文本文件和二进制文件。
文本文件是以文本的形式存储数据的文件,其中的数据以可打印字符的形式表示。
文本文件可以使用文本编辑器打开并查看其内容。
二进制文件以二进制形式存储数据的文件,其中的数据以二进制位表示。
二进制文件一般不能直接使用文本编辑器打开查看,需要通过特定的程序进行读取和解析。
2. 文件操作的基本过程文件操作的基本过程包括打开文件、读取或写入文件、关闭文件。
下面分别介绍这三个步骤的具体内容。
2.1 打开文件在Fortran中,可以使用`OPEN`语句打开一个文件。
打开文件时需要指定文件名、打开模式和文件单元号。
OPEN(unit=文件单元号, file=文件名, status=打开模式)其中,文件单元号是一个整数值,用来标识一个打开的文件。
文件名是一个字符串,表示要打开的文件的路径和文件名。
打开模式可以是以下几种:- `READ`:只读模式,用于从文件中读取数据。
- `WRITE`:只写模式,用于向文件中写入数据。
如果文件不存在,则创建一个新文件;如果文件已存在,则清空文件内容。
- `APPEND`:追加模式,用于向文件中写入数据。
如果文件不存在,则创建一个新文件;如果文件已存在,则在文件末尾追加写入数据。
- `READWRITE`:读写模式,既可以读取数据,也可以写入数据。
2.2 读取或写入文件在打开文件之后,可以使用`READ`和`WRITE`语句进行读取和写入操作。
读取文件时,可以使用以下语句:READ(unit=文件单元号, ) ! 读取文件中的数据写入文件时,可以使用以下语句:WRITE(unit=文件单元号, ) ! 将数据写入文件在读取或写入文件时,需要注意数据的格式。
二进制读写文件二进制是一种用于表示和存储数据的编码系统,它由0和1两个数字组成。
在计算机中,所有的数据都以二进制形式存储和传输。
在本文中,我们将探讨如何使用二进制读写文件,以及它的一些应用。
让我们看看如何使用二进制读取文件。
在计算机中,文件是一系列的字节组成的。
每个字节由8个二进制位组成。
使用二进制读取文件时,我们可以逐字节地读取文件内容,并将其转换为相应的二进制表示。
在大多数编程语言中,都提供了读取二进制文件的方法和函数。
我们可以使用这些方法打开文件,并按字节读取文件内容。
通过这种方式,我们可以读取文件中的所有数据,包括文本、图像、音频等等。
接下来,让我们探讨如何使用二进制写入文件。
与读取文件相反,使用二进制写入文件时,我们可以将数据以二进制形式写入文件中。
同样,我们可以按字节写入文件内容,将其转换为相应的二进制表示。
使用二进制写入文件时,我们可以创建一个新文件或覆盖已有文件。
我们可以将数据以二进制形式写入文件,并将其保存在计算机的存储介质中。
这样,我们就可以在以后的时间里读取这些数据,或者与其他人共享这些数据。
除了基本的读写文件操作,二进制还有许多其他的应用。
例如,在网络传输中,数据通常以二进制形式传输。
当我们通过互联网发送或接收数据时,数据会被转换为二进制形式,并通过网络传输。
在接收方那里,数据会被重新转换为其原始形式。
另一个应用是在计算机中存储图像和音频。
图像和音频文件通常很大,因为它们包含了大量的数据。
使用二进制存储这些文件可以节省存储空间,并提高读写效率。
在读取图像和音频文件时,我们可以按字节读取文件内容,并将其转换为相应的二进制表示。
二进制还可以用于存储和传输其他类型的数据,如视频、压缩文件等。
通过将数据转换为二进制形式,我们可以有效地存储和传输这些数据,同时保持数据的完整性和准确性。
总结一下,二进制是一种用于表示和存储数据的编码系统。
通过使用二进制读写文件,我们可以读取和写入文件内容,并以二进制形式存储和传输数据。
FORTRAN 读取二进制文件两种打开方式:直接打开(access='direct')、流(access='stream',老版FORTRAN没有)1、直接打开方式把二进制文件看成一个一个的记录,每个记录的大小为RECL*4字节,READ 中的REC是指读第几个记录,每次只能读RECL*4字节的数据(即一个记录大小)。
程序中RECL=4,READ(2,REC=806)是只读第806个记录,每个记录大小为16字节,那个第806个记录的起始位置是805*16+1=12881。
定位错误,所以读出的数据也是错的。
SEGY的卷头和道头,以及地震道数据,每个数据的长度为2字节或4字节,所以16字节的记录长度不太合适,所以把RECL改为1,即记录大小为4字节,这个时候第806个记录起始位置为805*4+1=3221。
program maininteger*2 num1,num2open(2,file='test.sgy',status='old',access='direct',recl=1)read(2,rec=806) num1,num2print*,num1,num2endnum1即为采样点数。
如果使用RECL=4,即每个记录大小为16字节,3220/16=201.25,也就是要读的目标数据在第202个记录上,但不是第202个记录的起始位置。
16*201=3216,即第202个记录的起始位置是3217,所以要读三个INTEGER*2,第三个才是目标数据。
program maininteger*2 num1,num2,num3open(2,file='test.sgy',status='old',access='direct',recl=4)read(2,rec=202) num1,num2,num3print*,num1,num2,num3endnum3才是采样点数,而num1应该就是采样间隔。
二进制文件读写(写给新手)二进制文件读写(写给新手)FortranFortran 二进制文件读写【给新手】一).一般问题二进制文件与我们通常使用的文本文件储存方式有根本的不同。
这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多。
因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器。
这样的编辑器有很多,在我们的 CVF 附带的集成开发环境下就可以(将二进制文件拖动到 IDE 窗口后松开)。
Visual Studio 2005 也是可以的。
(不过需要在 File 菜单下 Open,File)另外推荐一款使用较多的软件,叫做 UltraEdit(以下简称 UE)。
是很不错的文本编辑器,也能做十六进制编辑器使用。
为什么要用十六进制编辑器?而不用 2 进制呢?因为 2 进制实在太小,书写起来会很长,很不直观。
而我们的计算机把 8 位作为一个字节。
刚好 2 ** 8 = 256 = 16 ** 2。
用 8 位 2 进制表达的数,我们用 2 个十六进制数据来表达,更直观和方便。
二).文件格式所有文件,笼统意义上将可以区分为两类,一类是文本文件,一类是二进制文件。
1).文本文件文本文件用记事本等文本编辑器打开,我们可以看懂上面的信息。
所以使用比较广泛。
通常一个文本文件分为很多很多行,作为数据储存时,还有列的概念。
实际上,储存在硬盘或其他介质上,文件内容是线一样储存的,列是用空格或 Tab 间隔,行是用回车和换行符间隔。
以 ANSI 编码(使用较多)的文本文件来说,例如我们储存如下信息:101112需要的空间是:3 行×每行 2 个字符 + 2 个回车符 + 2 个换行符 = 10 字节。
文本文件储存数据是有格式,无数据类型的。
比如 10 这个数据,并不指定是整型还是实型还是字符串。
它有长度,就是 2,两个字节。
储存时计算机储存它的 ASCII 码:31h,30h。
(十六进制表示)。
回车符是:0Dh,换行符:0Ah。
fortranwrite用法一、Fortranwrite简介Fortranwrite是一种用于文件读写的Fortran语言的函数或子程序。
它可以实现将数据写入文件或者从文件中读取数据的功能,是Fortran语言中非常常用的工具之一。
Fortranwrite函数的用法灵活多样,可以根据不同的需求选择合适的方式进行数据写入。
下面将介绍Fortranwrite的用法及相关注意事项。
二、Fortranwrite的基本用法Fortranwrite函数的基本用法如下:```CALL Fortranwrite(Unit, Data, Numbytes)```其中,Unit是文件的编号,Data是待写入的数据,Numbytes是待写入数据的字节数。
三、Fortranwrite的参数类型1. Unit参数类型Unit参数是Fortranwrite函数中用来指定文件编号的参数。
在写入文件前,需要先打开文件,并获得一个文件编号。
文件编号是一个整型数值,它可以是任意非零正整数,表示文件的唯一标识符。
一般情况下,可以使用以下代码获得一个文件编号:```OPEN(Unit=Unit, File=FileName, Status=Status, Action=Action)其中,FileName是文件名,Status是文件打开状态(如"OLD"表示打开已存在的文件,"NEW"表示创建新文件),Action是文件打开方式(如"READ"表示只读,"WRITE"表示只写,"APPEND"表示在文件末尾追加写入)。
2. Data参数类型Data参数是Fortranwrite函数中用来指定待写入数据的参数。
Data的类型可以是Fortran中的任意数据类型,例如整型、实型、字符型等。
3. Numbytes参数类型Numbytes参数是Fortranwrite函数中用来指定待写入数据的字节数的参数。
【Fortran】Fortran中Open,Read和Write的⽤法1:write(*,*)"string";write(unit=*,FMT=*)"string";write(unit=6,FMT=*)"string"。
以上等价,6是默认输出位置,即屏幕。
2:print*,"string"。
Print只能对屏幕输出。
3:integer(kind=4) a !f90;integer*4 a !f77;integer(4) a !f77。
以上等价。
real(kind=4) a !f90;real*4 a !f77;real(4) a !f77。
以上等价。
4:f77,变量名长度1~6;f90,变量名长度1~31。
5:read(*,*)"string";write(unit=*,FMT=*)"string";write(unit=5,FMT=*)"string"。
以上等价,5是默认输⼊位置,即键盘。
6:FORMAT6.1 格式输出格式输出语句由两部分组成:输出语句和输出格式语句。
输出语句的⼀般形式为:WRITE(*,L) 输出表列或: PRINT L 输出表列其中:* 代表隐含的输出设备,L 指输出格式语句的标号。
输出格式语句的⼀般形式:L FORMAT(1X,S)其中:L 输出格式语句的标号,1X 纵向⾛纸符,S 输出格式,⽤不同的“格式编辑符”(简称“编辑符”)来实现指定的输出格式,各格式间⽤逗号相隔。
FORMAT语句⼜叫“格式语句”,是⼀个⾮执⾏语句,本⾝不产⽣任何操作,只是提供输⼊或输出的格式。
FORMAT语句可以出现在程序的任何地⽅(但必须在PROGRAM语句之后和END语句之前,如果在⼦程序中⽤FORMAT语句,则应在⼦程序定义语句之后)。
系统按WRITE语句或PRINT语句中指定的语句标号找到相应的FORMAT语句,并按FORMAT语句所规定的格式对数据进⾏输出。
最近专业课海洋要素计算作业需要用fortran编程读取验潮站资料(如下,是txt,其中数据是有62行,限于篇幅,我只截取了前5行数据外加验潮站的4行头信息)!要注意的是最后一列数据后面没有空格program ex1!**********************************************!* written by 潘海东, 2015,3,20!*一次性读取744个数据,放入一维数组中!*(如果一次性读取太多的话可能会对系统造成某些影响)!**********************************************INTEGER :: b(62*12),icharacter(len=20) time,location,u1,u2open(10, file = 'C:\Users\Administrator\Desktop\sjs_t_97aug_m(harmonic).txt', status = 'old')!********读取头信息read(10,"(A3)") u1read(10,"(A18)") timeread(10,"(A13)") locationread(10,"(A2)") u2!********读取数据read(10,100) b(:)100 format(61(11(I4,1x),I4,/),11(I4,1x),I4) !在fortran的输入输出中'/'代表换行close(10)endprogram ex2!**********************************************!* written by 潘海东, 2015,3,20!*读取第3列至第11列!**********************************************INTEGER :: a(62,9),icharacter(len=20) time,location,u1,u2open(10, file = 'C:\Users\Administrator\Desktop\sjs_t_97aug_m(harmonic).txt', status = 'old')!***读取头信息read(10,"(A3)") u1read(10,"(A18)") timeread(10,"(A13)") locationread(10,"(A2)") u2!***读取验潮站数据do i=1,62read(10,100) a(i,:)write(*,99) a(i,:)end do99 format(9(I4,1x))100 format(10x,9(I4,1x),4x)close(10)end!!!!这些技巧总结起来就是利用nX跳过不想要的东西。
fortranwrite用法Fortran中的fortranwrite是一个用于文件写入的子程序。
它提供了一种将数据以二进制格式写入文件的方法,并可以按照指定格式将数据转换为字符文本。
fortranwrite具有灵活的选项,可以根据不同的需求调整数据写入的方式。
fortranwrite的基本语法如下:`WRITE (unit, format) [input-list]`其中,unit指定了要写入的文件单元号,通常是一个整数或逻辑单元号。
这个单元号可以是事先由OPEN语句获得的逻辑单元号,也可以是内建的实体所定义的逻辑单元号(如*或者"stdout"表示控制台输出,或者trim文件的单元号)。
format是一个字符表达式,用于指定将数据转换为字符的格式。
格式指令是用于指定如何写入和读取数据的符号,也称为“格式编辑描述符”。
Fortran的格式编辑描述符包括格式宽度、字段宽度、编辑序列等。
input-list是需要写入文件的数据列表。
数据可以是常数、数组、变量或者复合结构。
input-list中的每个元素都按照format中的格式转换为字符并写入文件。
下面是使用fortranwrite的一个例子:fortranprogram write_exampleimplicit noneinteger :: i, jreal :: x(10), y(10)! 给数组x和y赋值do i = 1, 10x(i) = iy(i) = i2end do! 打开文件并写入数据open(unit=10, file='data.dat', status='replace', action='write') do i = 1, 10write(10, '(2F10.2)') x(i), y(i)end doclose(unit=10)! 从文件读取数据并打印open(unit=10, file='data.dat', status='old', action='read')do i = 1, 10read(10, '(2F10.2)') x(i), y(i)end doclose(unit=10)! 打印读取到的数据do i = 1, 10write(*, '(2F10.2)') x(i), y(i)end doend program write_example在上面的示例中,我们首先定义了两个数组x和y,然后使用do循环为它们赋值。
fortran中readFortran是一种广泛使用的编程语言,尤其在科学计算和工程领域得到广泛应用。
在Fortran中,读取输入数据通常使用read语句实现。
在本文中,我们将探讨Fortran中read语句的用法,以及一些相关的注意事项。
首先,我们需要了解read语句的语法。
在Fortran中,read语句的语法如下:read(*,*)其中"*"表示通配符,代表任何数据类型。
第一个星号表示读取输入数据的格式,第二个星号表示读取输入数据的来源。
因此,如果我们想要从标准输入读取一个整数,我们可以使用以下代码:program read_exampleimplicit noneinteger :: nread(*,*) nwrite(*,*) nend program read_example在这个示例程序中,read语句的第一个星号表示我们希望读取一个整数,而第二个星号表示我们希望从标准输入读取数据。
读取的数据将存储在变量n中,最后我们使用write语句将结果输出到标准输出。
除了通配符外,我们还可以使用Fortran中定义的数据类型来读取特定的数据。
例如,如果我们想要读取一个字符串,我们可以使用以下代码:program read_string_exampleimplicit nonecharacter(len=10) :: sread(*,*) swrite(*,*) send program read_string_example在这个示例程序中,我们定义了一个长度为10的字符型变量s,然后使用read语句读取输入的字符串,并使用write语句输出结果。
除了基本数据类型外,read语句还可以用于读取数组和格式化的输入数据。
例如,如果我们想要读取一个5x5的矩阵,我们可以使用以下代码:program read_matrix_exampleimplicit noneinteger :: i, jinteger, dimension(5,5) :: matrixdo i = 1, 5read(*,*) matrix(i,:)end dodo i = 1, 5do j = 1, 5write(*,'(I3)') matrix(i,j)end dowrite(*,*)end doend program read_matrix_example在这个示例程序中,我们先定义了一个5x5的整型数组matrix,然后使用do循环和read语句逐行读取输入的数据。
让FORTRAN也能随机读写二进制文件任意字节数
王成良
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】1996(000)006
【摘要】本文提出了一种解决任何一种FORTRAN77语言随机读写二进制文件任意字节数的方法,并给出了该方法的源程序及调用实例。
【总页数】3页(P17-19)
【作者】王成良
【作者单位】无
【正文语种】中文
【中图分类】TP312FO
【相关文献】
1.高压气体淬火过程数值模拟软件中Fortran数据文件的处理--有限元和有限体积法软件二次开发中对Fortran二进制文件的处理 [J], 黄鹏;魏兴钊
2.利用VB随机文件处理中文记录与中文二进制文件的读取研究 [J], 王德超
3.任意随机序列关于二重非齐次马氏链的随机和的一类随机选择系统的随机逼近定理 [J], 王康康;李芳;杨卫国
4.FORTRAN语言上的任意精度运算 [J], 徐国良;李家楷
5.利用VB随机文件处理中文记录与中文二进制文件的读取研究 [J], 王德超
因版权原因,仅展示原文概要,查看原文内容请购买。
Matlab中如何实现二进制文件的读写1、文件的打开与关闭1)打开文件在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。
fopen函数的调用格式为:fid=fopen(文件名,‘打开方式’)说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。
文件名用字符串形式,表示待打开的数据文件。
常见的打开方式如下:‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
‘r+’:读写方式打开文件,打开后先读后写。
该文件必须已存在。
‘w’:打开后写入数据。
该文件已存在则更新;不存在则创建。
‘w+’:读写方式打开文件。
先读后写。
该文件已存在则更新;不存在则创建。
‘a’:在打开的文件末端添加数据。
文件不存在则创建。
‘a+’:打开文件后,先读入数据再添加数据。
文件不存在则创建。
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
2)关闭文件文件在进行完读、写等操作后,应及时关闭,以免数据丢失。
关闭文件用fclose函数,调用格式为:sta=fclose(fid)说明:该函数关闭fid所表示的文件。
sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。
如果要关闭所有已打开的文件用fclose(‘all’)。
2、二进制文件的读写操作1)写二进制文件fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。
其调用格式为:COUNT=fwrite(fid,A,'precision')说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。
缺省数据精度为uchar,即无符号字符格式。