请问unsinged char a[2] 转化为unsigned short k; C或C++均可
请教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);
问题在哪啊?
期待大家释疑!
------解决方案--------------------
大小端问题,你觉得结果应该是什么呢?
如果不想知道大小端,假定1为高位,k=a[1]<<8
------解决方案--------------------
a[0];否则类似
------解决方案--------------------
没仔细看,原先写法就错了,应该是
k = *(unsigned short*)a;
------解决方案--------------------
竟然是ascii。。。。看来是先高位后低位
k=(a[0]-'0')<<8
------解决方案--------------------
(a[1]-'0')
------解决方案--------------------
你要先搞清楚你发送的时候是个啥东西,2个元素的BYTE数组?每个元素的值分别是0,2还是'0','2'这是不一样的,如果按照上边两个方法转换过来肯定不会是原来的02,或者20.如果你的意思是转换结果无符号short的值也是02,可以这样
------解决方案--------------------
怎么可以用atoi?a根本没结束符,这样结果不可知
------解决方案--------------------
是没有结束符,如果单纯显示的话尾部会有乱码,不过只要尾部的乱码不是数字这样转化的结果还是正确的。保险起见定义3个长度的BYTE加上结束符
------解决方案--------------------
结果正确,那么转换过程正确么?假设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;
------解决方案--------------------
电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
unsinged char a[2];
unsigned short k;
a[0] = 0;
a[1] = 8;
k = (unsigned short)a;
printf("%d \n",k);
问题在哪啊?
------解决方案--------------------
大小端问题,你觉得结果应该是什么呢?
如果不想知道大小端,假定1为高位,k=a[1]<<8
------解决方案--------------------
a[0];否则类似
------解决方案--------------------
没仔细看,原先写法就错了,应该是
k = *(unsigned short*)a;
------解决方案--------------------
竟然是ascii。。。。看来是先高位后低位
k=(a[0]-'0')<<8
------解决方案--------------------
(a[1]-'0')
------解决方案--------------------
你要先搞清楚你发送的时候是个啥东西,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);
------解决方案--------------------
怎么可以用atoi?a根本没结束符,这样结果不可知
------解决方案--------------------
是没有结束符,如果单纯显示的话尾部会有乱码,不过只要尾部的乱码不是数字这样转化的结果还是正确的。保险起见定义3个长度的BYTE加上结束符
------解决方案--------------------
结果正确,那么转换过程正确么?假设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;
------解决方案--------------------
电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……