首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

读文件应该用char 还是 unsigned char?解决思路

2012-02-29 
读文件应该用char 还是 unsigned char?如题, 两者具体有什么区别?[解决办法]其实用 char还是 unsigned cha

读文件应该用char 还是 unsigned char?
如题, 两者具体有什么区别?

[解决办法]
其实用 char还是 unsigned char都没啥区别的。
我这边项目很多读取文件都是用char的。
一样跑的开心,也没出啥乱码。

char 和 unsigned char 上只是在 数据 解释上有区别,在内存里面是没有区别的。
也就是说,数据读进内存这一步是没有问题的,
但是进入内存以后,如果你用char读的,就将作为 char来解释,
这时候的计算你就要按照char的规矩来,
反过来如果用 uchar就应该按照uchar来。


[解决办法]
我喜欢后者。因为不会出现负值。
[解决办法]
unsigned char可能会好点
[解决办法]
应该用BYTE
二进制数据读出来之后再检测文本的编码。
[解决办法]
据说楼上是CSDN首页风云人物
[解决办法]
在windef.h里有
typedef unsigned char BYTE;

更喜欢1楼的回答!
[解决办法]
看你读出来怎么用,一般没区别。

[解决办法]
最好用unsigned char。
[解决办法]
也习惯用unsigned char
[解决办法]
我 来 看 4楼的
[解决办法]
看你读什么文件,如果是文本文件,建议用int或signed char,因为fgetc()返回值就是int类型的,如果用char,因为C标准没有规定char是不是有符号的。如果碰到char=unsigned char的情况,就无处理EOF了,因为EOF=-1。下面这个就会成死循环:
 while ( (c = fgetc(fp)) != EOF )
        {
            ......
        }

如果是二进制读写,应该用byte,因为byte肯定是正数,而且二进制处理多了正负反而麻烦,截断和位操作啥的不容易出错。
[解决办法]
如果做简单纯文本读取的话,建议还是用int或signed char(虽会截断),如果用unsigned char,会导致EOF丢失。反正对char直接加减运算的情况比较少。
二进制数据读取再检测编码那种适合高级编辑器等,要考虑的东西还有很多,比如\n在不同操作系统下的解释问题。毕竟文本模式读取系统会自动解释\n,而二进制模式就需要手动解释。另外高级编辑器还要支持Unicode的BOM、UTF-16的扩充格式、UTF-8的不规范拆分、大小尾序问题……如果是多字节编码,还要进行统计检测,看是GB18030、Big5、Latin-1啥的。一般开发就算了。
[解决办法]

探讨
看你读什么文件,如果是文本文件,建议用int或signed char,因为fgetc()返回值就是int类型的,如果用char,因为C标准没有规定char是不是有符号的。如果碰到char=unsigned char的情况,就无处理EOF了,因为EOF=-1。下面这个就会成死循环:
 while ( (c = fgetc(fp)) != EOF )
        {
            ……

[解决办法]
菜鸟学习了
[解决办法]
其实都是一样的,只要你不一会用char,一会用unisigned char就ok了,转换的话很可能出错
[解决办法]
一直都用char
[解决办法]
区别最大的地方:
c=255;
printf("%d %02x\n",c,c);//看看unsigned char c和char c分别输出什么
[解决办法]
只在自己要输出显示的时候有区别,在内存里就是8bit的数,没什么区别

热点排行