欢迎使用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
原创粉丝点击