读文件应该用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啥的。一般开发就算了。
[解决办法]