1:判断大端小端机器方法
inti=0X12345678
0X120X340X560X78 大端存储(BigEndian)按照字符串从左向右的顺序存储
0X78 0X560X340X12小端存储(LittleEndian)
程序:
利用联合类型,联合类型,个联合共享一段内存空间,一个联合变量的长度是各成员中最长的长度
int main() { union ut{ short s; char c[2]; }u; if(sizeof(short) == 2) { u.s = 0x0102; if(u.c[0] == 1 && u.c[1] == 2) { printf("big enidan/n"); }else if(u.c[0] == 2 && u.c[1] == 1) { printf("little endian./n"); } return 0; } }
2:java 内存中数据的存储 采用的是大端模式
而C++是 采用 小端模式
服务器端是c++ 客户端是java 这样发送数据的时候 字节顺序要进行调整,因为C++server端直接从socket流中读取出数据,没有关心是否将数据按照网络字节顺序(即大端模式)进行解析
则:
如果发送int类型的数据时候 ,就需要手动组拼 字节数组,将int转换为字节数组
/** * 将int转为低字节在前,高字节在后的byte数组 */ private static byte[] toLH(int n) { byte[] b = new byte[4]; b[0] = (byte) (n & 0xff); b[1] = (byte) (n >> 8 & 0xff); b[2] = (byte) (n >> 16 & 0xff); b[3] = (byte) (n >> 24 & 0xff); return b; }
同样其它类型的数据(除字符型外)也需要进行字节顺序调整
问题2:如果C++服务器接受字符使用的是wchar_t字节 类型 那java传递字符类型的时候要注意
调整字节顺序, 因为wchar_t类型 针对汉字和英文都占用两个字节
例子: String name = "杨abc";
上面的字符串其 大端显示情况为:
public static void printbyte(byte[] bt) { for (int i = 0; i < bt.length; i++){ int hex = (int)bt[i] & 0xff; System.out.print(Integer.toHexString(hex) + " "); } System.out.println(" length = "+bt.length); } @Test public void test1() throws UnsupportedEncodingException { String name = "杨彬abc"; // TODO Auto-generated method stub byte[] defaultBytes = name.getBytes(); printbyte(defaultBytes); byte[] utf_8 = name.getBytes("utf-8"); printbyte(utf_8); byte[] utf_16be = name.getBytes("utf-16be"); printbyte(utf_16be); byte[] utf_16le = name.getBytes("utf-16le"); printbyte(utf_16le); byte[] gbk = name.getBytes("gbk"); printbyte(gbk); /* * e6 9d a8 e5 bd ac 61 62 63 length = 9 默认 e6 9d a8 e5 bd ac 61 62 63 length = 9 utf-8 汉字占三个字节 而utf-8 采用 3 个字节存储汉字 1个字节存储英文字符 unicode 采用两个字节存储汉字及英文字符 67 68 5f 6c 0 61 0 62 0 63 length = 10 大端方式 汉字占两个字节 68 67 6c 5f 61 0 62 0 63 0 length = 10 小端方式 gbk采用两个字节存储汉字 d1 ee b1 f2 61 62 63 length = 7 */ //网络编程socket 通讯 针对字符串采用 utf-16le 这种方式存储 }
相关推荐
大端 小端
提供一个大小端转换的类,可以转换short int float double类型,提供一个大小端转换的类,可以转换short int float double类型,提供一个大小端转换的类,可以转换short int float double类型
所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往...
java实现使用javolution完成数据接收过程中大小端转换的问题
运行程序,可判识并输出程序所在平台的存储方式,是大端还是小端。
本文主要描述大端小端的概念,分类和区别,还讲述了他们的由来,以及各自的优缺点,对初识者具有很大的帮助
描述大端、小端模式,给出了如何判断CPU是哪种模式的代码!
关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。
小端大端透析-附检测代码,帮你理清计算机、单片机的大小端存储,含图片形象解析;附测试代码,方便测试;是计算机专业和电子专业以及广大单片机开发人员必备资料
自己根据spy3中的大端与小端的使用,总结出大小端的理解与区别,及intel与motorola
大端和小端的区别,数据在内存里面存放的方式,源代码讲解,发上来大家一起学习下!
字节序转换辅助类,short大小端转换,ushort大小端转换,int大小端转换,uint大小...short类型 小端转大端,short类型 大端转小端,int类型 小端转大端,int类型 大端转小端,long类型 小端转大端,long类型 大端转小端
iOS 大端格式和小段格式 文档
利用联合的方法,判断X86平台是小端序存储还是大端序存储
大端机小端机检查器-用于检查PC是大端机还是小端机
1.浮点型数据转16进制数。 2.支持大小端格式选择。 3.支持输入非法数据判断。
西门子PLC接口,大端和小-Endian的存储格式pdf,西门子PLC接口,大端和小-Endian的存储格式:本文介绍了SINUMERIK:PLC接口,和Little-Endian的Big-Endian的存储格式
如何判断你的计算机是大端还是小端存储?
golang语言如何判断机器的大小端? 如下代码供参考: 代码如下: package main import ( “fmt” “unsafe” ) const N int = int(unsafe.Sizeof(0)) func main() { x := 0x1234 p...
endian c++大小端编辑,大端小端转换,readInt writeInt 等等函数,方便操作,c++编写,只需要包含头文件就可以用,没有lib和dll的需求