android java 和 windows C/C++/QT通讯时 数据存放字节序的理解
来源:互联网 发布:matlab 替换矩阵元素 编辑:程序博客网 时间:2024/06/01 19:20
可以通过程序来判别本机是哪种字节序存放int,short,long,float的。
参考文章:
http://blog.csdn.net/gaoxuefeng/article/details/7818704
java:采用大端字节序存储数据【低地址存放数据的高位,高地址存放数据的低位,数据高位存放在数组的前面】
小数端)
【数据高位】: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和一些windows编程语言如c、c++、delphi所写的网络程序进行通讯时,需要进行高、低字节之间的转换
- C小知识点:字符数组和字符型指正存放相同数据时使用的内存
- Java和C/C++程序实时通讯数据移植问题的研究
- php和c++socket通讯(基于字节流,二进制)
- php和c++socket通讯(基于字节流,二进制)
- php和c++socket通讯(基于字节流,二进制)
- php和c++socket通讯(基于字节流,二进制) .
- php和c++socket通讯(基于字节流,二进制)
- java程序和C/C++程序的通讯
- 关于c语言不同类型变量存放位置的个人理解
- Java使用JNI调用C/C++(windows和android平台)
- Java和C/C++交互的字节工具类
- 4字节UTF16编码和对C++/Java的影响
- 对c语言和java的理解
- C语言数据对应的字节大小
- C语言中数据在内存中是如何存放的
- java与c之间的socket通讯
- CSDN博客导出工具(待开源)
- 试用期总结
- FLEX业务处理
- RHEL6.1字符界面安装图形界面
- 傍大款危险!Audience遭苹果狠心遗弃,一夜跌去63%
- android java 和 windows C/C++/QT通讯时 数据存放字节序的理解
- android布局属性详解
- shell中判断字符串为空的几种方法
- 时间预估 mathematica程序 [再改]
- 我们从David Cutler学到什么?
- 美国计算机专业CS申请热门方向
- android view三个构造函数研究
- 用GDB调试程序(二)
- C# 判断socket断开