欢迎使用CSDN-markdown编辑器
来源:互联网 发布:qq三国79js单刷孟获 编辑:程序博客网 时间:2024/06/08 18:44
强制类型转换中出现的问题
实现一个将int类型的变量按十六进制,以字节为单位输出
这里写代码片#include<stdio.h>typedef char *byte_pointer;void showByte(byte_pointer start, size_t len){ size_t i=len; for(i=0;i<len;i++){ printf("%.2x\n",start[i]); }}int main(){ int a=12345; showByte((byte_pointer)(&a),sizeof(a)); return 0;}
运行结果为:
39
30
00
00
但是当a为负数时,例如为-122时,运行结果为:
ffffff86
ffffffff
ffffffff
ffffffff
希望的运行结果是:
86
ff
ff
ff
问题出在printf(“%.2x”,start[i]),输出时%x会让char类型自动与int类型对齐,将8位扩展为32为,对于无符号(unsigned char)类型,扩展时在左边加“0”,而对于有符号(char)类型,扩展是在左边加“1”,所以才会出现ffffff86状况,解决方法就是将:
typedef char *byte_pointer;
修改为:
typedef unsigned char *byte_pointer;
修改后代码为:
#include<stdio.h>typedef unsigned char *byte_pointer;void showByte(byte_pointer start, size_t len){ size_t i=len; for(i=0;i<len;i++){ printf("%.2x\n",start[i]); }}int main(){ int a=-122; showByte((byte_pointer)(&a),sizeof(a)); return 0;}
运行结果为:
86
ff
ff
ff
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- centos环境配置信息
- 基于二叉排序树的基本操作
- java中文汉字按英文字母表排序
- DTW的基本原理及其C语言实现
- STL vector的内部实现原理及基本用法
- 欢迎使用CSDN-markdown编辑器
- 微信小程序开发之弹出菜单
- mongoDB
- [XOR最小生成树 分治 Trie || Prim 堆] BNUOJ 52318 Be Friends
- The method getTextContent() is undefined for the type Node解决方法(eclipse)
- linux环境变量设置错误后的恢复方法(转)
- 数据结构之基于Java的二叉树实现
- vc 使用ShellExecut来启动控制面板中功能模块的操作
- 做一个内容提供者