2018. 3. 28. 01:04

bitmask 작성 방법

#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");
}

2018. 3. 27. 23:23

little endian에서의 Structure 2진수 출력

#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++);
 }
}

2018. 3. 27. 22:55

little endian -> big endian

#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]);
}