char与unsigned char的综合比较及实例
来源:互联网 发布:ce改车软件 编辑:程序博客网 时间:2024/05/12 19:16
字符类型有char与unsigned char两种,它们之间有何区别呢?为何对字符也要分个有符号与无符号呢?下面是个人的见解。
char 是有符号的 ,unsigned char 是无符号的。
char 整数范围为-128到127( 0x80__0x7F), 而unsigned char 整数范围为0到255( 0__0xFF )。
其实分出个正负是由于char类型在内存中的存储形式与int类型相同(或说相似),也正是由于此点char类型的值可以与int类型(包括unsigned,short等)的值通用。当然要注意表示的范围。
char可以看成是单字节的整数,而int类型最低也得要两个字节(本处说int时代指了所有的整型类型)。当要用单字节表示整数时(以节省内存)就得用char。
更为重要的是英文字母ASCII中都小于0x80,0x80以上的字符都是非英文字符及制表符(当然包括汉字及其他国家的字符)。而对于char来说最大只能表示到0x7F(127),要想表示非英文字符就要大于0x7F,因而也也必须要产生一个unsigned char(它的范围大于0X7F)。
请看以下的简单示例:
#include <stdio.h>
#include <string.h>
void main()
{
int nCount=0;
//char*p="abcd汉字";
char p[]="abcd汉字";
int len=strlen(p);
int num=0;
for(int i=0;i<len;i++)
{
if((unsigned char)p[i]>0x7F)
{
i++;
num++;
}
nCount++;
}
printf("字符串 \"%s\" 长度为 %d 字节,共有 %d 个字符,其中汉字字符有 %d 个。\n",p,len,nCount,num);
//另外一种方法:
/*char*/ unsigned char *szText= (unsigned char*)"12345你好";
int len2= strlen((const char*)szText); //强制转换
int sum=0;
for (int j=0; j< len2; j++)
if (/*(unsigned char)*/szText[j] > 0xa0)
sum++;
sum/=2;
printf("字符串 \"%s\" 中有汉字 %d 个。\n",szText,sum);
}
注意:代码中若要把字符数组直接定义为unsigned char,用strlen函数时要注意强制类型转换,否则出错。此时可以注释掉if语句中的unsigned char。若要定义数组为char,可以直接用strlen函数,但在if语句中需要加上unsigned char。
- char与unsigned char的综合比较及实例
- char与unsigned char的综合比较及实例
- char与unsigned char的综合比较及实例
- unsigned char与char
- unsigned char与char
- char 与 unsigned char
- unsigned char 与 char
- char 与 unsigned char
- unsigned char 与 char
- unsigned char 与 char
- unsigned char与char
- unsigned char 与 char
- char 与 unsigned char
- char 与 unsigned char
- char 与 unsigned char
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- gcc
- ios之表视图
- js彩票大乐透
- android调用系统拍照程序和从图库选取图片,返回后调用系统裁剪工具
- 如何增加网站pv值
- char与unsigned char的综合比较及实例
- spring mvc注解例子
- Linux使用Shell脚本实现ftp的自动上传下载
- Luncher修改wallpaper(壁纸)源码跟踪(代码实现过程分析)
- coredump介绍
- PV与并发之间换算的算法换算公式
- Android程序项目结构
- android之Itent.ACTION_PICK Intent.ACTION_GET_CONTENT妙用
- LVM(逻辑卷管理)