字节顺序

#include <stdio.h>

typedef int* int_ptr;
typedef unsigned char* byte_ptr;

void show_bytes( byte_ptr start, int len ){

	int i;

	for( i = 0; i < len; ++i ){
		printf( " %4.2x", start[i] );
	}

	printf( "\n" );

}

void show_int( int x ){
	show_bytes( ( byte_ptr ) &x, sizeof( int ) );
}

void show_float( float x ){
	show_bytes( ( byte_ptr ) &x, sizeof( float ) );
}

void show_ptr( void* x ){
	show_bytes( ( byte_ptr ) &x, sizeof( void* ) );
}

void test_show_bytes( int val ){

	int ival   = val;
	float fval = ( float ) ival;
	int* pval  = &ival;

	show_int( ival );
	show_float( fval );
	show_ptr( pval );

}

int main(){

	/*
		Machine | value   | type  | byte( hexadecimal ) |
		-------------------------------------
		Linux   | 12345   | int   | 39 30 00 00
		NT      | 12345   | int   | 39 30 00 00
		Sun     | 12345   | int   | 00 00 30 39 ( big endian )
		Alpha   | 12345   | int   | 39 30 00 00
		--------------------------------------
		Linux   | 12345.0 | float | 00 e4 40 46
		NT      | 12345.0 | float | 00 e4 40 46
		Sun     | 12345.0 | float | 46 40 e4 00
		Alpha   | 12345.0 | float | 00 e4 40 46
		--------------------------------------
		Linux   | &ival   | int*  | 3e fa ff bf
		NT      | &ival   | int*  | 1c ff 44 02
		Sun     | &ival   | int*  | ef ff fc e4
		Alpha   | &ival   | int*  | 80 fc ff 1f 01 00 00 00
	*/

	test_show_bytes( 12345 );

	return 0;

}
时间: 2025-01-04 23:40:49

字节顺序的相关文章

字节顺序的详细解释(转)

原出处:http://blog.csdn.net/yingfox/article/details/1831848 一.基本概念 位的概念:在计算机中,一个0或1称为一位(bit). 字节:连续的八位称为一个字节(Byte),字节是计算机中可单独处理的最小单位.即以字节为基本单位来解释信息,规定1个字节是8个二进制位. 通常1个ASCII码用1个字节存放,1个汉字用2个字节存放,双精度浮点实数用8个字节存放.下面列表C语言中定义类型所占字节以及数据范围. 类型标识符         类型说明   

大端模式与小端模式、网络字节顺序与主机字节顺序

大端模式与小端模式 一.概念及详解 在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式. 先回顾两个关键词,MSB和LSB: MSB:Most Significant Bit  ------- 最高有效位     LSB:Least Significant Bit ------- 最低有效位 大端模式(big-edian) big-endian:MSB存放在最低端的地址上. 举例,双字节数0x1234以big-endia

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

[转]android开发之字节顺序

原文在此 android上C++程序为小端字节顺序,和windows上一样. 而android上的JAVA程序则使用的是大端字节顺序. 用NDK和java SDK 做android程序时发现的问题,记录备忘...

【网络编程系列】一:字节顺序的大端与小端表示法

一.字节序 字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序. 在几乎所有的机器上,多字节对象都被存储为连续的字节序列.例如:如果C/C++中的一个int型变量 a 的起始地址是&a = 0x100,那么 a 的四个字节将被存储在存储器的0x100, 0x101,0x102, 0x103位置. 根据整数 a 在连续的 4 byte 内存中的存储顺序,字节序被分为大端序(Big Endian) 与 小端序(Little Endian)两类. 然后就牵涉出两大CPU派系: Motoro

基于X86平台的PC机通过网络发送一个int(32位)整数的字节顺序

1.字节顺序 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端.大端两种字节顺序.小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处:大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处.计算机中读取数据的时候是从高地址到低地址,存储数据时候相反! 2.主机字节序到网络字节序 基于X86平台的PC机是小端字节序的,而有的嵌入式平台则是大端字节序的.因而对int.uint16.uint32等多于1字节类型的数据,在这些嵌入式平台上应该变换其存储顺

对于思考小端和大端字节顺序

最近,该公司希望改变核心处理器,由小端处理器ARM为大端处理器POWERPC.bootloader以及kernel移植的工作对我来说,这是一个非常具有挑战性的工作.我很兴奋. 如此一来.当今主流的嵌入式处理器(MIPS ARM PPC)也都算接触过啦. 这几天開始动手做移植,首先要解决的是大小端的差异,进过学习思考,感觉大小端还是非常有研究的必要.自己的思考总结记录在此,与大家分享,以备后用. 从网上能够查到的大小端的解释,小端是低端数据存放在低端地址.大端是高端数据存在低端地址.大小端真的就这

我如何确定一个机器的字节顺序是大端还是小端?

通常的技巧是使用一个指针: int x = 1; if(*(char *)&x == 1) printf("little-endian\n"); else printf("big-endian\n"); 或者一个union: union { int i; char c[sizeof(int)]; } x; x.i = 1; if(x.c[0] == 1) printf("little-endian\n"); else printf(&qu

大小端字节顺序

字节序的问题涉及硬件架构,目前主要是Motorola的PowerPC系列CPU和Intel的x86系列CPU.PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据.那么究竟什么是big endian,什么又是little endian呢? 为方便理解,摘了INTER手册中的一张图.呵呵. 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端.大端两种字节顺序.小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内

大端模式和小端模式 网络字节顺序与主机字节顺序

在 各种计算机体系结构中,对于字节.字等的存储机制有所不同,因而引发了计算机 通信领 域中一个很重要的问题,即通信双方交流的信息单元(比特.字节.字.双字等等)应该以什么样的顺序进行传送.如果不达成一致的规则,通信双方将无法进行正 确的编/译码从而导致通信失败.目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian和Little-Endian,下面先从字节序说起.一.什么是字节序字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的