/****************************************************
* 判斷參數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;
}
未完,待續......
位運算的函數整理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.