惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
T
The Blog of Author Tim Ferriss
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
Engineering at Meta
Engineering at Meta
量子位
I
InfoQ
Jina AI
Jina AI
Microsoft Security Blog
Microsoft Security Blog
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog
J
Java Code Geeks
Recent Announcements
Recent Announcements
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
V
V2EX
腾讯CDC
P
Proofpoint News Feed
A
About on SuperTechFans
爱范儿
爱范儿
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI

博客园 - 拒绝潜水的鱼

使用QT调用外部程序-小心linux中的命令陷阱 linux source命令为什么在C/QT/C++语言中不起作用 IOS6应用开发实战1-第一个IOS程序 IOS开发入门-XCode4真机调试整理 第一届江苏WEB开发者大会(7月31日星期日)期待您的参与 对象生成数据库还是数据库生成代码 对于基础架构的一些思考 10月25号-第六届南京程序员技术大会(Tech2009) .NET 以GBK编码数据传输 关于SQL触发器批量更新的问题 关于零的字符串处理 勤哲EXCEL服务器8.3以上版本可能存在的BUG visual studio 2005 查找和替换窗口 显示不了 递归与迭代 ERROR 2003:Can't connect to MySQL server on 'localhost' (10061) vc++导出C#可用的DLL C#中调试C++的DLL 在 windows servers 2003 环境下,安装了.NET 1.1 和 2.0 的版本后,IIS中居然找不到1.1和2.0的切换选项卡 勤哲8.3较8.2版本变化的参数与方法
unsigned char 与char的区别
拒绝潜水的鱼 · 2009-03-24 · via 博客园 - 拒绝潜水的鱼

Character values of type unsigned char have a range from 0 to 0xFF hexadecimal. A signed char has range 0x80 to 0x7F. These ranges translate to 0 to 255 decimal, and –128 to +127 decimal, respectively. The /J compiler option changes the default from signed to unsigned.

char 是有符号的

unsigned char 是无符号的,里面全是正数

两者都作为字符用的话是没有区别的,但当整数用时有区别:

char 整数范围为-128到127( 0x80__0x7F),  

而unsigned char 整数范围为0到255( 0__0xFF )

多数情况下,char ,signed char 、unsigned char 类型的数据具有相同的特性然而当你把一个单字节的数赋给一个大整型数域时,便会看到它们在符号扩展上的差异。另一个区别表现在当把一个介于128和255之间的数赋给signed char 变量时编译器必须先进行数值转化,同样还会出现警告。

看下面的函数。

功能:统计字符串里面的字母的个数

char sText[]= "12345Hello";

len = strlen(sText);

int sum=0;

for (int i=0; i< len; i++)

{

    // The ASCII of character >= 65

if (sText[i] > 64)

{

sum++;

}

}

这样你根本统计到任何汉字,

因为char是有符号的,最大就是127,超过就变成负数了。比如7f 是127,那么80就是-1了。

这时候你一定要写成

unsigned char sText[]= "12345你好";

参考程序:

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

    unsigned char sText[]= "12345Hello";

    int len = 0;

    char temp;

    // unsigned int strlen(const char *s);

    // We need to convert sText from unsigned char* to const char*

    len = strlen((const char*)sText);

    cout<<"The strlen is"<<len<<endl;

    int sum=0;

    for(int i=0; i< len; i++)

    {

        // The ASCII of character >= 65

        if (sText[i] > 64)

        {

            sum++;

        }

        cout<<"Character count:"<<sum<<endl;

    }

    // just to have a pause

    cout<<"Enter any thing to exit!"<<endl;

    cin>>temp;

    return 0;

}

作者:拒绝潜水的鱼
出处:http://slave2.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。