Android 和 windows CC++QT通讯时字节存储

Android 和 windows CC++QT通讯时字节存储,第1张

概述ava:采用大端字节存储数据【低地址存放数据的高位,高地址存放数据的低位,数据高位存放在数组的前面】

ava:采用大端字节序存储数据【低地址存放数据的高位,高地址存放数据的低位,数据高位存放在数组的前面】

windows(intel平台):采用小端字节序存储数据【低地址存放数据的低位,高地址存放数据的高位,数据的高位存放在数组的后面】(windows接收java发送过来的short,int需要调用ntohs和ntohl来转换到小数端)

【数据高位】:0x1234的高位为 0x12

【数据低位】:0x1234的低位为 0x34

如: int ihex = 0x12345678;

short shex=0x1234;

java内存中存储为:

byte[] = { '0x12','0x34','0x56','0x78'}byte[] = { '0x12','0x34'}

而windows下(intel cpu):

c/c++/qt 存储为

一个字符数组地址是从首地址开始递增的,也就是数组下标越大,内存地址越大。

=====char[] 前面是低地址,后面是高地址

char [] = {'0x78','0x12'} //QByteArray和char[]一致char [] = {'0x34','0x12'}

设计java端clIEnt程序时,需要我们在程序中显式采用大端字节序来处理int,short,long(字符串不需要考虑),即将int,long转换成byte[]。【将short,int的高位存储在字符数组的前面】当然你想用小字节存放也可以,socket收到数据后打印出来看int,short的16进制数字节序,然后做处理即可。

函数如下:(大端字节序存储的函数)

/*整型转化成字符序列,类似的函数baIDu可以找到很多
*执行位 *** 作,将int i = 0x12345678; 对应二进制:
*内存中存放:低地址
*00010010 0x12
*00110100 0x34
*01010110 0x56
*01111000 0x78
*高地址
*/

// 存放到byte[]={'0x12','0x78'}位置处

public static byte[] intToBytes(int i){ //bytes[0] = 00010010 //bytes[1] = 00110100 //bytes[2] = 01010110 //bytes[3] = 01111000 byte bytes[] = new byte[4]; for (int j = 3; j >= 0; j--)  bytes[3 - j] = (byte)(i >> 8 * (3 - j) & 0xff); //bytes[0] :直接将i的低8bits和0xff与 *** 作即可,此时j=3 return bytes;}
public static byte[] shortToBytes(short s){ byte bytes[] = new byte[2]; bytes[0]=(byte)(0xFF&(s>>8)); //低地址存放高位数据,低位数据被右移8bits后删除了。(返回高8位值) bytes[1]=(byte)(0xFF&s); //高地址存放低位数据,位 *** 作当然是低位执行的与 *** 作。当前只和8bits与,(即返回低8bits值) return bytes;}

以上就是对androID java 和 windows C/C++/QT通讯时 数据存放字节序的理解,有需要的可以参考下

总结

以上是内存溢出为你收集整理的Android 和 windows C/C++/QT通讯时字节存储全部内容,希望文章能够帮你解决Android 和 windows C/C++/QT通讯时字节存储所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1148848.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存