Android 和 windows C/C++/QT通讯时字节存储
作者:lqh 发布时间:2022-07-16 06:09:02
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;
}


猜你喜欢
- 说到导出 Excel,我们首先会想到 poi、jsxl 等,使用这些工具会显得笨重,学习难度大。今天学习使用 JeecgBoot 中的 Au
- 使用后台返回验证码图片,验证码存到session中后端实现校验,前端只展示验证码图片。本篇用SpringBoot Thymeleaf实现验证
- 一、async和await特性的结构1. 异步和同步同步方法:如果一个方法被调用了,等待其执行所有处理后调用方法才继续执行的方法。异步方法:
- 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到“硬件加速”这个词。由于操作系统对底层软硬件封装非常完善,上层软件开发者往
- service是业务层 action层即作为控制器DAO (Data Access Object) 数据访问1.JAVA中Action层,
- 功能:通过响应UI Textbox 的值向ListView 绑定新添加的纪录。UI XAML 代码<Grid Margin="
- 本文实例讲述了C#中事务处理和非事务处理方法。分享给大家供大家参考。具体如下:C#代码如下:String connectionString
- 用java实现循环队列的方法:1、添加一个属性size用来记录眼下的元素个数。目的是当head=rear的时候。通过size=0还是size
- 背景:当我们有需求将HashMap转为Json格式的String时,切记不要使用HashMap的toString()方法,需要使用FastJ
- 本文实例总结了C#中string.format用法。分享给大家供大家参考。具体分析如下:String.Format 方法的几种定义:Stri
- 对Android的SD卡进行读取权限设置时: <uses-permission android:name="android.
- 最近项目需求中有需要导出Execl表格的要求,而且还是大量的数据,于是把之前的整理了一下,抽成了一个统一的工具类,需要时直接调用工具类即可,
- 首先,看一下效果 可能各位在别处看到过类似的东西,我在微信的文章末尾看到有个玩意,感觉有意思,就用代码实现一下。这篇文章主要把握
- 导出Excel在很多项目中经常用到,本人介绍了C#实现GridView导出Excel实例代码,也全当给自己留下个学习笔记了。using Sy
- 现在的智能手机不敢说百分百的都是触摸屏,也应该是百分之九九以上为触摸屏了,触摸屏为我们操作无键盘、无鼠标的手机系统带来了很多的便利。当用户触
- 本文实例为大家分享了SpringMVC实现文件上传和下载的具体代码,供大家参考,具体内容如下文件上传第一步,加入jar包:commons-f
- 开发设计搞了一个带圆形进度的进度条,在GitHub上逛了一圈,发现没有,自己撸吧。先看界面效果:主要思路是写一个继承ProgressBar的
- 布局文件:res/layout/activity_my.xml[html] <LinearLayout xmlns:and
- 一、ArrayListArrayList是一个可以处理变长数组的类型,这里不局限于“数”组,ArrayList是一个泛型类,可以存放任意类型
- 简介Android Studio升级到3.0后,有不少的改动和新特性,先贴出官方的迁移说明。本文会持续收集与总结本人在使用Android S