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

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通讯时 数据存放字节序的理解,有需要的可以参考下

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, android
, windows

485串口通讯 丢字节、串口通讯中的帧和字节、can通讯报文字节和位、qt 字节数组、qt 多字节字符集,以便于您获取更多的相关知识。

时间: 2024-10-27 06:13:37

Android 和 windows C/C++/QT通讯时字节存储_Android的相关文章

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

ava:采用大端字节序存储数据[低地址存放数据的高位,高地址存放数据的低位,数据高位存放在数组的前面] windows(intel平台):采用小端字节序存储数据[低地址存放数据的低位,高地址存放数据的高位,数据的高位存放在数组的后面](windows接收java发送过来的short,int需要调用ntohs和ntohl来转换到小数端) [数据高位]:0x1234的高位为 0x12 [数据低位]:0x1234的低位为 0x34 如: int ihex = 0x12345678; short she

Android 测试 Intel HAXM 超快模拟器时出现的问题解决

Android 测试 Intel HAXM 超快模拟器时出现的问题解决 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Intel HAXM 可使 Intel Atom (x86) 模拟器镜像的

跟后台打印程序系统服务通讯时出现错误的解决方法_win服务器

事件类型:      警告事件来源:      TermServDevices事件种类:      无事件 ID:      1114日期:          2006-12-19事件:          15:50:17用户:          N/A计算机:      描述:跟后台打印程序系统服务通讯时出现错误.请打开服务管理单元,确认后台打印程序服务是否在运行.-----------------------------------------------------------------

跟后台打印程序系统服务通讯时出现错误解决方法_win服务器

事件类型:      警告 事件来源:      TermServDevices 事件种类:      无 事件 ID:      1114 日期:          2006-12-19 事件:          15:50:17 用户:          N/A 计算机:      YONGFA365 描述: 跟后台打印程序系统服务通讯时出现错误.请打开服务管理单元,确认后台打印程序服务是否在运行. ----------------------------------------------

Windows XP无法切换键盘时要怎么办?

  Windows XP无法切换键盘时要怎么办?           1.在任务栏中的语言栏图标上,鼠标右键单击"设置"按钮 2.进入"文字服务和输入语言"设置界面,单击"首选项"中的"键设置"按钮 3.打开"高级键设置"窗口,在输入语言的热键的操作列表中选中"在不同的输入语言之间切换",单击"更改按键顺序" 4.取消"切换键盘布局"的复选框,单击

Windows 7系统使用无线时提示:“windows无法启动wireless pan dhcp server"

  故障现象: Windows 7系统使用无线时提示"windows无法启动wireless pan dhcp server服务"(位于本地计算机上).错误1067:进程意外终止.如下图所示: 解决方案: 1. 进入联想官方服务网站,手动下载并完全安装INTEL无线网卡驱动; 2. 打开本机网络连接界面,如下图所示: 3. 在本地连接右键属性并选择共享,如下图所示:(注:家庭网络连接可能有多个无线连接,需选择本机无线网卡对应的连接名称,此步非常重要.) 4. 在共享页面点击设置,出现高

Android实现点击AlertDialog上按钮时不关闭对话框的方法_Android

本文实例讲述了Android实现点击AlertDialog上按钮时不关闭对话框的方法.分享给大家供大家参考.具体如下: 开发过程中,有时候会有这样的需求: 点击某个按钮之后显示一个对话框,对话框上面有一个输入框,并且有"确认"和"取消"两个按钮.当用户点击确认按钮时,需要对输入框的内容进行判断.如果内容为空则不关闭对话框,并toast提示. 使用AlertDialog.Builder创建对话框时,可以使用builder.setNegativeButton和build

照相机-android camera开始预览以后 数据时怎么刷到surfaceview上面的

问题描述 android camera开始预览以后 数据时怎么刷到surfaceview上面的 当camera打开以后 初始化 调用 initDisplayBuffers()以后 是如何刷新 界面的 也就是如何将数据传到屏幕的,代码看到了好久 ,也没有了解这个刷新机制,求指点. 解决方案 当APP调用系统API打开摄像头时,命令从framework到HAL,再到内核,内核的摄像头驱动会初始化摄像头接口,摄像头sensor,然后经由摄像头采集图像数据,存放到事先分配好的内存中.完成之后,内核会将存

qt 运行时的错误,g_main_context_push_thread_default'

问题描述 qt 运行时的错误,g_main_context_push_thread_default' undefined reference to g_main_context_push_thread_default' undefined reference tog_main_context_pop_thread_default' 解决方案 hi, undefined reference to XXX 说明没有找到/链接到包含该函数(XXX)的库. 而具体的 g_main_context_pus