导航:首页 > 编程语言 > java大端小端

java大端小端

发布时间:2022-10-15 12:15:45

⑴ 大端模式和小端模式的区别及如何判断的存储器的模式

一个数需要超过一个字节来存储时,就有大端和小端的区别,只用一个字节时,无所谓大小端
低位的放在低地址,也就是小个在前,叫小端,反之叫大端
c和c++需要面对这样的问题,java等高级语言已经屏蔽这个差异,不需要额外处理
在c中,可以用以下代码片段来判断是大端还是小端
union {char c; int i;} u;
u.i = 1;
if(u.c == 1){//小端}
else{//大端}

⑵ Java的socket收发自定义对象

  1. byte可以通过ByteArrayInputStream轻松的转成流对象,然后再转成Object流就可以收发对象了。

  2. 大小端底层应该已经处理了,不需要我们关心

  3. 印象中默认好像没有机制,需要你自己约定结束标志。

⑶ java网络编程是大端还是小端

网络传输中采用的大端标记法,也就是说先传比较高权值的数字, 就像 12一样,先传10,在传2,就算丢了后面一个,损失也不是太大。

小端就跟机器有关了。你在封装一个int之类的数字,封装进去之后就应该是大端的了,可以调用里面的 htons() 或者htonl()函数来转化成大端的(当然你也可以自己按照大端的方式封装,就会麻烦一点而已)。传输过程中当然也是大端的,接受到的buffer里面当然也是大端的,但是你在读取这个int类型的时候,就需要相应的将大端转化为小端了(采用ntohs() 函数或ntohl()函数来实现),这样你读取到的就是原来的数字。

可想而知,假如你用机器A和B通信,而且A和B的端序都是一样的话,中间自然就不用转换来转换去了。但是这不是好习惯,因为假如移植到另外端序的机器的话就需要修改代码笭害蒂轿郦计垫袭叮陋。所以最好还是用那几个函数。

⑷ Java盲区:如何用Java检测大端和小端

static ByteOrder byteOrder() { if (byteOrder == null) throw new Error("Unknown byte order"); return byteOrder;
} static { long a = unsafe.allocateMemory(8); try { unsafe.putLong(a, 0x0102030405060708L); byte b = unsafe.getByte(a); switch (b) { case 0x01: byteOrder = ByteOrder.BIG_ENDIAN; break; case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN; break; default:
assert false;
byteOrder = null;
}
} finally { unsafe.freeMemory(a);
}
}

⑸ 大端模式和小端模式

具体如下:


1、大端模式:

大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式类似于把数据当作字符串顺序处理。

地址由小向大增加,而数据从高位往低位放;小端模式,是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

在大端模式下,前16位应该这样读: e6 84 6c 4e ( 假设int占4个字节)。

记忆方法: 地址的增长顺序与值的增长顺序相反。

2、小端模式例子:

0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000。

0000440: b484 6c4e 004e ed00 0000 0000 0100 0000。

在小端模式下,前16位应该这样读: 4e 6c 84 e6( 假设int占4个字节)。

记忆方法: 地址的增长顺序与值的增长顺序相同。

大小端模式:

为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器。

例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。

对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

⑹ c语言和java 使用socket通信的时候 数据大小端转换的问题

我也搞网络编程搞好久了,大小端这个问题倒是没有遇到过啊,我同事做Java,我做IOS都一样的,都是小端的。
建议你用抓包软件抓下包看看,还有就是注意发送时数据对齐问题,不同的系统可能一样的类型长度就不一样,比如在mac系统中long型有8字节,但是在IOS、VC中就只有四个字节,一般使用socket发送数据时都是打包发送的(头部一般都是固定的结构体),这个问题必须要注意

⑺ 大端存储与小端存储对存储数据的要求

大端小端针对多字节数据存储时字节顺序而言的。所谓"Little Endian",为INTEL所采用模式,数据的低字节存放在内存低地址中,高字节存放在高地址中,即学X86时说的“高高低低”原则。Byte3 Byte2 Byte1 Byte0在内存中对应的是:

Base Address+0 Byte0
Base Address+1 Byte1
Base Address+2 Byte2
Base Address+3 Byte3

所谓"Big Endian" ,为MOTO所采用模式,数据的低字节存放在内存的高地址,数据的高字节存放在内存的低地址。Byte3 Byte2 Byte1 Byte0在内存中对应的是:

Base Address+0 Byte3
Base Address+1 Byte2
Base Address+2 Byte1
Base Address+3 Byte0

Java使用的是大端序来存储数据。big—endian:即低字节的数据存储在高位内存上,如对于1234,12是高位数据,34为低位数据,则java中的存储格式应该为12存在内存的低地址,34存在内存的高地址,x86中的存储格式与之相反。

阅读全文

与java大端小端相关的资料

热点内容
android平滑滚动效果 浏览:841
什么是编译器指令 浏览:219
微控制器逻辑命令使用什么总线 浏览:885
程序员在学校里是学什么的 浏览:601
oraclejava数据类型 浏览:890
程序员考注册会计师 浏览:957
怎么使用access的命令按钮 浏览:899
有点钱app在哪里下载 浏览:832
博途v15解压后无法安装 浏览:205
什么是根服务器主机 浏览:438
安卓手游怎么申请退款 浏览:555
安卓系统如何分享网页 浏览:278
ad如何编译pcb工程 浏览:414
除了滴滴app哪里还能用滴滴 浏览:399
截图怎么保存文件夹然后压缩 浏览:8
幻影服务器怎么样 浏览:28
具体哪些广东公司招程序员 浏览:870
嵌入式编译器教程 浏览:307
ssl数据加密传输 浏览:87
51单片机定时器方式2 浏览:332