将unsigned char字符串以16进制的字符串显示
来源:互联网 发布:唱给自己的歌网络战队 编辑:程序博客网 时间:2024/06/05 02:10
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别
首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127,unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。
在实际使用过程种有什么区别呢?
主要是符号位,但是在普通的赋值,读写文件和网络字节流都没什么区别,反正就是一个字节,不管最高位是什么,最终的读取结果都一样,只是你怎么理解最高位而已,在屏幕上面的显示可能不一样。
但是我们却发现在表示byte时,都用unsigned char,这是为什么呢?
首先我们通常意义上理解,byte没有什么符号位之说,更重要的是如果将byte的值赋给int,long等数据类型时,系统会做一些额外的工作。如果是char,那么系统认为最高位是符号位,而int可能是16或者32位,那么会对最高位进行扩展(注意,赋给unsigned int也会扩展)而如果是unsigned char,那么不会扩展。
首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127,unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。
在实际使用过程种有什么区别呢?
主要是符号位,但是在普通的赋值,读写文件和网络字节流都没什么区别,反正就是一个字节,不管最高位是什么,最终的读取结果都一样,只是你怎么理解最高位而已,在屏幕上面的显示可能不一样。
但是我们却发现在表示byte时,都用unsigned char,这是为什么呢?
首先我们通常意义上理解,byte没有什么符号位之说,更重要的是如果将byte的值赋给int,long等数据类型时,系统会做一些额外的工作。如果是char,那么系统认为最高位是符号位,而int可能是16或者32位,那么会对最高位进行扩展(注意,赋给unsigned int也会扩展)而如果是unsigned char,那么不会扩展。
这就是二者的最大区别。
这里又想起另外一个问题:数字1和字符1在计算机实际储存的值
如果都是一个字节,那么数字1实际存储的是0x01,字符'1'实际存储的是0x31。
上一段代码,这段代码的功能是将unsigned char类型字符串的内容以其真实内存数据形式存储到另外一个字符串里
static const char hex_chars[] = "0123456789ABCDEF";CString convert_hex(unsigned char *md/*字符串*/,int nLen/*转义多少个字符*/){CString strSha1(_T(""));unsigned int c = 0;// 查看unsigned char占几个字节// 实际占1个字节,8位int nByte = sizeof(unsigned char);for (int i = 0; i < nLen; i++){// 查看md一个字节里的信息unsigned int x = 0;x = md[i];x = md[i] >> 4;// 右移,干掉4位,左边高位补0000c = (md[i] >> 4) & 0x0f;strSha1 += hex_chars[c];strSha1 += hex_chars[md[i] & 0x0f];}return strSha1;}void OnBnClickedButton2(){unsigned char org[] = "123456789abcdf我爱你二进制";CString str;int i=1;i = i <<4;// 左移 执行完这行i的值为16str=convert_hex(org,20);OutputDebugString(str);}调试展示样例,部分参见ASCII码映射表
最终得到的结果如下
最终表明事实胜于雄辩
阅读全文
0 0
- 将unsigned char字符串以16进制的字符串显示
- 如何将CSting字符串转成独立的以8bit为单位的unsigned char字符
- 将16进制形式的以空格分隔的字符串输出到char[]中
- string char* 16进制数字转化 unsigned char* 转化 字符串拼接
- unsigned char字符串和char字符串之间的转化
- 统计unsigned char字符串的个数
- QT如何将QlineEdit里的QString字符串存储到unsigned char 数组中
- 单片机中unsigned char转字符串的方法
- VC 字符串的相互转换 CString 和 unsigned char*
- unsigned char* 类型数据转换字符串 string
- 将16进制的字符串以10进制的方式输出
- C语言char*字符串数组和unsigned char[]数组的相互转换
- C语言char*字符串数组和unsigned char[]数组的相互转换
- 将字符串以指定的长度换行
- 常用字符串函数 && char数组存字符串 && unsigned char数组存字符串 && 数组当形参
- 将以逗号分隔的字符串转换成字符串数组
- 汉字转以首字母显示的字符串
- 字符串数组|char *转换为unsigned int|友元
- Cows(凸包面积)
- native.js 安卓自动连接制定名称和密码的wifi
- hihocoder-1526 序列的值(DP/二进制)
- 学习JPA
- 检查网络是否连接的工具类
- 将unsigned char字符串以16进制的字符串显示
- 122. Best Time to Buy and Sell Stock II
- 【openjudge】单词接龙
- Java基础(一)变量与运算
- Javascript设计模式-05-外观模式
- C++中的TYPE、DWORD与WORD
- Spring学习(三):BeanFactory和ApplicationContext
- 在简历中使用STAR法则
- 以太坊环境搭建