前几天遇到个东西, 以前也遇到过今天总结下吧. 这几天sha1做的我挺烦的.
问题是 : 我们遇到ASCII码超过127怎么办? 字符的表示是什么?
1 char 32位模式下表示一个字节,即 -128~127
采用的是ASCII码编码方式是0~127
2 unsigned char 32位模式下表示一个字节,即 0~255
当超过127的时候, 不在是单字节方式而是字节序列, 应该这样说吧 是单字节字符集
C语言显示ascii码超过127的字符这个链接其实有点问题(个人评价), 因为没有超过127的字符, 其与的应该采用的是ISO-8859-1编码方式(ISO-8859-1编码也是单字节编码,最多能够表示256个字符。)
至于其显示方式 和控制台有关系, 具体更改方式的话是这样的:
方法是:请设置Dos窗口的默认代码页为美国而不是简体中文。右键单击Dos窗口的标题栏,在弹出菜单中选择"默认值",修改默认代码页为"437 OEM-美国",就可以了。
3 上面2个可以看到进行扩展的时候, unsigned char 不会符号扩展 因为最高位是0 , 所以char为正数的时候也是这样
4 char * 和 unsigned char*
char * 表示字符串, unsigned char * 表示的是“字节序列”, 是按unsigned char 类型解释所指向的内容。具体应用不同,有的要求按无符号类型处理,像网络编程中IP地址,MAC地址等.也就是说,换句话说, 其中的内容不一定是文本,比如一段MIDI音乐。如果已经知道里边确实是文本字符串,不管哪种,需要时强制转换一下就是了. (字节序列, 字节存储的一定序列, 例如网络编程时候的htons()等网络字节序)
5 字符串转换;
(1) char 向 int 转换就不说了直接赋过去
(2)
1)字符串向int转换
例如: "1234" ->1234
char *str = "1234";
int n = atoi(str);
2)int向字符串转换:
例如: 1234 -> "1234"
int n = 1234;
char str[20];
itoa(n,str,10);
3) 两个函数的具体情况:
参考: C语言中char int转换
itoa
功 能:把一整数转换为字符串
用 法:char *itoa(int value, char *string, int radix);
详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写.
参数: value: 待转化的整数。 radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。 * string: 保存转换后得到的字符串。
返回值: char * : 指向生成的字符串, 同*string。
该函数的头文件是"stdlib.h"
atoi
C语言库函数名: atoi
功 能: 把字符串转换成整型数
函数说明: atoi()会扫描参数nptr字符串,检测到第一个数字或正负符号时开始做类型转换,之后检测到非数字或结束符 \0 时停止转换,返回整型数。
原型: int atoi(const char *nptr);
需要用到的头文件: #include
这个先这样吧, 下一篇文章 补充下缺少的部分