首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问unsinged char a[2] 转化为unsigned short k; C或C++均可

2013-04-26 
请教unsingedchara[2] 转化为unsigned short k; C或C++均可unsinged char a[2];unsigned short k;a[0] 0

请教unsinged char a[2] 转化为unsigned short k; C或C++均可
unsinged char a[2];
unsigned short k;
a[0] = 0;
a[1] = 8;
k = (unsigned short)a;
printf("%d \n",k);

问题在哪啊?请问unsinged  char  a[2] 转化为unsigned short k; C或C++均可期待大家释疑!

[解决办法]
大小端问题,你觉得结果应该是什么呢?
如果不想知道大小端,假定1为高位,k=a[1]<<8 
[解决办法]
 a[0];否则类似
[解决办法]
没仔细看,原先写法就错了,应该是
k = *(unsigned short*)a;
[解决办法]
竟然是ascii。。。。看来是先高位后低位
k=(a[0]-'0')<<8 
[解决办法]
 (a[1]-'0')
[解决办法]

引用:
谢谢一楼,二楼的指导,可是问题尚未解决。
程序的拓扑是:外部设备-------(串口)---------PC机
外部设备通过串口线发送BYTE型(实际是unsigned char)的数据到PC机,PC机上VC6.0中通过CSCOmm控件接受,然后转化为unsigned short 类型的。
注:转化前打印出来时正常的02
通过一楼的方法,编译通过,结果不对,我串口发过来的是02,转化后变成……
你要先搞清楚你发送的时候是个啥东西,2个元素的BYTE数组?每个元素的值分别是0,2还是'0','2'这是不一样的,如果按照上边两个方法转换过来肯定不会是原来的02,或者20.如果你的意思是转换结果无符号short的值也是02,可以这样
    BYTE a[2];
    unsigned short k;
    a[0] = '0';     // 注意这里的值是字符'0'
    a[1] = '2';     // 注意这里的值是字符'2'
    k = atoi((char*)a); // 字符串转化为数字
    printf("%d \n",k);

[解决办法]
引用:
引用:谢谢一楼,二楼的指导,可是问题尚未解决。
程序的拓扑是:外部设备-------(串口)---------PC机
外部设备通过串口线发送BYTE型(实际是unsigned char)的数据到PC机,PC机上VC6.0中通过CSCOmm控件接受,然后转化为unsigned short 类型的。
注:转化前打印出来时正常的02
……

怎么可以用atoi?a根本没结束符,这样结果不可知
[解决办法]
引用:
引用:
引用:谢谢一楼,二楼的指导,可是问题尚未解决。
程序的拓扑是:外部设备-------(串口)---------PC机
外部设备通过串口线发送BYTE型(实际是unsigned char)的数据到PC机,PC机上VC6.0中通过CSCOmm控件接受,然后转化为unsigned short 类型的。
注:转化前打印出来……
是没有结束符,如果单纯显示的话尾部会有乱码,不过只要尾部的乱码不是数字这样转化的结果还是正确的。保险起见定义3个长度的BYTE加上结束符
[解决办法]
引用:
引用:引用:
引用:谢谢一楼,二楼的指导,可是问题尚未解决。
程序的拓扑是:外部设备-------(串口)---------PC机
外部设备通过串口线发送BYTE型(实际是unsigned char)的数据到PC机,PC机上VC6.0中通过CSCOmm控件接受,然后……


结果正确,那么转换过程正确么?假设a[2]后面有很多很多个非零字符,会不会直接访问到不能访问的地方呢?
那有没有想过,atoi的结果太大,short放不下呢?
[解决办法]
高低位反了吧。
unsigned char acBuff[2] = {'0', '2'};
unsigned short nResult = (((acBuff[0] - '0') << 8) 
[解决办法]
 (acBuff[1] - '0'));
如果数组acBuff[2]={'2','0'};那得到的值才会是512;
[解决办法]
电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……



VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。

[解决办法]

unsinged char a[2];
 unsigned short k;
 a[0] = 0;
 a[1] = 8;
 k = *(unsigned short *)a;
 printf("%d \n",k);

unsinged char a[2];
unsinged char b[2];
 unsigned short k;
 a[0] = 0;
 a[1] = 8;
b[0]=a[1];b[1]=a[0];
 k = *(unsigned short *)b;
 printf("%d \n",k);

热点排行