endian.c

来自「一个操作系统源代码 用于嵌入式设备 在Vc++环境下仿真 成功移植到多款处理器上」· C语言 代码 · 共 70 行

C
70
字号
#include <sys\cdevice.h>

//把word转换成byte stream
void Word2Bytes( unsigned char *s, unsigned short v )
{
	if( s == NULL )
		return;
#ifndef BIG_ENDIAN_ORDER
	s[1] = (unsigned char)( v >> 8 );		// 高字节放高位	
	s[0] = (unsigned char)( v & 0xff );
#else
	s[0] = (unsigned char)( v >> 8 );		// 低字节放高位	
	s[1] = (unsigned char)( v & 0xff );
#endif
	return;
}

//把byte stream转换成word
void Bytes2Word( unsigned short *v, unsigned char *s )
{
	if( v == NULL || s == NULL )
		return;
#ifndef BIG_ENDIAN_ORDER
	*v = (unsigned short)s[1];		// 高字节放高位	
	*v = ( (*v) << 8 ) | (unsigned short)s[0];		
#else
	*v = (unsigned short)s[0];		// 低字节放高位	
	*v = ( (*v) << 8 ) | (unsigned short)s[1];		
#endif
	return;
}

//把dword转换成byte stream
void DWord2Bytes( unsigned char *s, unsigned long v )
{
	if( s == NULL )
		return;
#ifndef BIG_ENDIAN_ORDER
	s[3] = (unsigned char)( v >> 24 );		// 高字节放高位	
	s[2] = (unsigned char)( ( v >> 16 )& 0xff );
	s[1] = (unsigned char)( ( v >> 8 )& 0xff );
	s[0] = (unsigned char)( v & 0xff );
#else
	s[0] = (unsigned char)( v >> 24 );		// 低字节放高位	
	s[1] = (unsigned char)( ( v >> 16 )& 0xff );
	s[2] = (unsigned char)( ( v >> 8 )& 0xff );
	s[3] = (unsigned char)( v & 0xff );
#endif
	return;
}

//把byte stream转换成dword
void Bytes2DWord( unsigned long *v, unsigned char *s )
{
	if( v == NULL || s == NULL )
		return;
#ifndef BIG_ENDIAN_ORDER
	*v = (unsigned long)s[3];		// 高字节放高位	
	*v = ( (*v) << 8 ) | (unsigned long)s[2];		
	*v = ( (*v) << 8 ) | (unsigned long)s[1];		
	*v = ( (*v) << 8 ) | (unsigned long)s[0];		
#else
	*v = (unsigned long)s[0];		// 低字节放高位	
	*v = ( (*v) << 8 ) | (unsigned long)s[1];		
	*v = ( (*v) << 8 ) | (unsigned long)s[2];		
	*v = ( (*v) << 8 ) | (unsigned long)s[3];		
#endif
	return;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?