'프로그래밍 세계/Coding Skill _ 비트연산'에 해당되는 글 3건
- 2018.03.28 bitmask 작성 방법
- 2018.03.27 little endian에서의 Structure 2진수 출력
- 2018.03.27 little endian -> big endian
#include <stdio.h>
#define TODIGIT(x) ((x)>'9'?(x)-'A'+10:(x)-'0')
#define MAX_SIZE (8)
int inputArr[MAX_SIZE] = {6,13,5,1,6,9,2,3};
int encyption(int* arr, int size)
{
int ptr = arr[0];
for (int i = 1; i < MAX_SIZE; i++)
{
ptr = (ptr << 4) | arr[i];
}
return ptr;
}
int decyption(int pack_data, int k)
{
int n = k * 4;
unsigned mask = 0xf;
mask <<= n;
return ((pack_data & mask) >> n);
}
void main()
{
int pack_num = encyption(inputArr, MAX_SIZE);
printf("pack data %d \n", pack_num);
for (int idx = MAX_SIZE - 1; idx >= 0; idx--)
{
int tmp = decyption(pack_num, idx);
printf("%d : %d \n", idx, tmp);
}
printf("\n");
}
little endian에서의 Structure 2진수 출력
![](https://tistory1.daumcdn.net/tistory/264881/skin/images/bg_clear.gif)
#include <stdio.h>
typedef struct {
char a;
char b;
int c;
} NODE_t;
void printBinary(char i)
{
int j;
for (j = 7; j >= 0; j--)
{
printf("%d", (i >> j) & 1);
}
printf(" ");
}
void run5()
{
char *ptr;
int idx;
NODE_t node;
node.a = 0x65;
node.b = 0xf0;
node.c = 0x01020304;
ptr = (char *)&node;
for (idx = 0; idx < sizeof(NODE_t); idx++)
{
printBinary(*ptr++);
}
}
#include <stdio.h>
void change(int * n) //general way
{
char *p = (char *)n;
char t;
t = p[0], p[0] = p[3], p[3] = t;
t = p[1], p[1] = p[2], p[2] = t;
}
void change(int *n)
{
printf("%d\n", (*n << 24));
// 0100 0000 0000 0000 0000 0000 0000 0000 (0x04000000)
printf("%d\n", ((*n << 8) & 0xff0000));
// 0000 0010 0000 0011 0000 0100 0000 0000 (0x02030400)
// & 0000 0000 1111 1111 0000 0000 0000 0000 (0x00ff0000)
// 0000 0000 0000 0011 0000 0000 0000 0000 (0x00030000)
printf("%d\n", ((*n >> 8) & 0xff00) );
// 0000 0000 0000 0001 0000 0010 0000 0011 (0x00010203)
// & 0000 0000 0000 0000 1111 1111 0000 0000 (0x0000ff00)
// 0000 0000 0000 0000 0000 0010 0000 0000 (0x00000200)
printf("%d\n", (*n >> 24));
// 0000 0000 0000 0000 0000 0000 0000 0001 (0x00000001)
*n = (*n << 24) | ((*n << 8) & 0x00ff0000) | ((*n >> 8) & 0x0000ff00) | (*n >> 24);
}
main()
{
int xData = 0x01020304;
char *ptr = (char*)&xData;
printf("x = %d%d%d%d\n", ptr[0], ptr[1], ptr[2], ptr[3]);
change1(&xData);
printf("x = %d%d%d%d\n", ptr[0], ptr[1], ptr[2], ptr[3]);
}