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 + -
显示快捷键?