当前位置: 首页 > 编程笔记 >

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

逑景铄
2023-03-14
本文向大家介绍Android 和 windows C/C++/QT通讯时字节存储,包括了Android 和 windows C/C++/QT通讯时字节存储的使用技巧和注意事项,需要的朋友参考一下

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','0x56','0x34','0x12'} //QByteArray和char[]一致
char [] = {'0x34','0x12'}

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

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

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

// 存放到byte[]={'0x12','0x34','0x56','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中接收UDP数据包。但是,这些都不对我有用! 一些基本知识: 我正在3G(不是wifi或其他任何设备)上运行的HTC Incredible(Android 2.2)上进行测试。这里没有仿真器。 我的代码很简单: 我的服务器(在我的PC上运行)正在侦听端口8752上的UDP通信。 我的Android应用程序在一个随机端口上打开一个D

  • 这是一个基于 C++/Qt 开发的 2048 游戏。游戏逻辑采用 C++ 编写,界面基于 Qt 5.2.1 开发。整个界面都是用代码生成,没有用到任何 Qt Creator 的 UI 设计工具。 代码和 UI 通过观察者模式进行解耦,因此很容易将游戏的逻辑用在其他 UI 上。 界面截图: 构建方法: 下载并安装 Qt (https://www.qt.io/download-open-source/

  • 我已经尝试了一个多星期通过串行端口从raspberry pi(QT C)到Arduino(Arduino IDE C)进行通信,但一直失败。 我在谷歌上做了一些搜索,阅读了这个例子。。。但我还是没有成功。好的,基本的事情是,我需要连续地通信从Raspberry pi发送到Arduino的串行端口命令。我试图使代码尽可能简单。 最初,我将J char从覆盆子pi(QT C)发送到Arduino(Ar

  • 问题内容: 什么是实现TCP套接字通信的首选平台? 我对......感兴趣: 脚本语言(例如,Swocket for Python) 和运行时(例如.NET / Java)。 问题答案: 在Java中,我们使用Apache Mina, http://mina.apache.org/ 其性能可与C实现媲美。

  • 我对在QT中使用MongoDB C++很新鲜。 然而,当我想在Qt上应用相同的代码时,出现了很多问题。 总体设置: Win10 带有Qt V5.10.1 MSVC2017的Qt Creator V4.6.0 64位Microsoft Visual C++编译器15.0调试器CDB x64 MongoDB v3.6.3 升压1.66.0作为lib64-msvc-14.1 Mongo c驱动程序v1.

  • Qt for Android (NECESSITAS)是一个为了让 Android 平台支持 Qt 开发的项目。