为什么字符串用unsigned char ,很少用 char
随着见的代码越来越多,发现在字符串数组定义时大家都喜欢用unsigned char ,而很少用char型变量。但是在C语言的库文件里关于字符串的函数变量又多是char型的,这是为什么呢? 因为使用unsigned char的那些都是不守规矩的,不守规矩的多了,就成了你看见的样子。C语言明确规定,char为字符型,是组成字符串的基本单位,而unsigned char和signed char则是整型,是数值型,同字符串没有任何关系。同样的还有bool类型,C99加入。 想表达字符就用char,想表达数值就用uint8_t或int8_t takashiki 发表于 2016-8-28 03:28因为使用unsigned char的那些都是不守规矩的,不守规矩的多了,就成了你看见的样子。C语言明确规定,char为 ...
哈哈,原来如此。。。。。。 如果想显示汉字 就要用uint_8了 3楼正解,字符串是英文的,某些编译器会自动处理最高位,但中文都是双字节,最高位为1的。 如果铁定是无符号的东西的话,能表示更大的数啊。 learner123 发表于 2016-8-31 14:35
3楼正解,字符串是英文的,某些编译器会自动处理最高位,但中文都是双字节,最高位为1的。 ...
那就是说在实际当中,有些编译器会对字符串的符号位进行处理,而使用无符号型的,就可以防止因它处理导致数据变化是不是? 很多mcu的char都是8bit的,int都是16bit的。如果确定变量低于256。又不确定平台的int宽度,声明uchar最方便。 对字符串来说,好像这个没啥差别 对于char来说,IDE平台会指定是signed char 还是 unsigned char的,可以修改默认值的。 wangsen 发表于 2016-9-3 00:59
那就是说在实际当中,有些编译器会对字符串的符号位进行处理,而使用无符号型的,就可以防止因它处理导致 ...
顺便扯一点,众所周知的keil C51对中文支持不太好,特别是在“”中的中文字符串...对ASCII来说除了扩展格式字符,可显示字符最高位没有为1的(符号型的负数)。所以keil C51针对个别中文字符处理会出错但不会影响英文字符。 有号数使用上会少一半,毕竟带负号的比较少用。 我也不懂,我也是来学习的。。。{:loveliness:}
页:
[1]