/****************************************************
* 判断参数x是否是偶数
*
* param[in] x 数值
* return 1 是偶数
* 0 是奇数
****************************************************
*
* test case:
* anyEvenOne(0x12345678) --> 1
*
****************************************************/
int anyEvenOne(unsigned x)
{
return !(x & 0x1);
}
/****************************************************
* 获取参数x的最高有效字节
*
* param[in] x 数值
* return fail ERROR
* success 最高有效字节
****************************************************
*
* test case:
* getMsb(0x12345678) --> 0x12
*
****************************************************/
int getMsb(int x)
{
if (x > INT_MAX || x < INT_MIN)
{
return ERROR;
}
return x >> ((sizeof(int)-1) << 3) & 0xFF;
}
/****************************************************
* 把参数x的字节i被替换成字节b
*
* param[in] x 数值
* param[in] b 替换成的字节
* param[in] i 第几位字节
* return fail ERROR
* success 替换字节后的数值
****************************************************
*
* test case:
* replace_byte(0x12345678, 0xAB, 0) --> 0x123456AB
* replace_byte(0x12345678, 0xAB, 2) --> 0x12AB5678
*
****************************************************/
int replace_byte(unsigned x, unsigned char b, int i)
{
if (i < 0 || i > 4)
{
return ERROR;
}
switch (i)
{
case 0:
x = (x & 0xffffff00) | b;
break;
case 1:
x = (x & 0xffff00ff) | (b << 8);
break;
case 2:
x = (x & 0xff00ffff) | (b << 16);
break;
case 3:
x = (x & 0x00ffffff) | (b << 24);
break;
default:
break;
}
return x;
}
/****************************************************
* 判断机器是否是小端字节序
*
* return 1 是小端
* 0 是大端
****************************************************/
int isLittleEndian()
{
int num = 1;
return (*(char*)&num) == 1 ? 1 : 0;
}
/****************************************************
* 显示字节序
*
* param[in] byte_pointer 显示字节序的数值
* param[in] len 数值长度
* return OK/ERROR
****************************************************
*
* test case:
* int a = 0x12345678;
*
* showBytes((char *)&a, sizeof(int));
*
****************************************************/
int showBytes(char* byte_pointer, int len)
{
if (NULL == byte_pointer)
{
return ERROR;
}
printf("0x");
for (int i = 0; i < len; i++)
{
printf("%.2x", byte_pointer[i]);
}
printf("\n");
return OK;
}
未完,待续......
位运算的函数整理
最新推荐文章于 2023-12-09 20:52:42 发布