본문 바로가기
개발이야기

1바이트를 n배수로 증가시켜 리턴하는 함수

by 코저씨 2021. 4. 16.
728x90

이번엔 생각외로 머리쓰며 만든 함수이다.

 

1바이트를 n배만큼 증가하여 배열로 리턴시켜주는 함수...

 

이 녀석은 생성된 이미지를 원하는 크기만큼 Enlarge 시켜주기 위한 함수로 만들었다..

 

소스는 다음과 같다.. 메인 함수는 ByteXNum함수이고 

0x81을 2배하면 0xC0 03 3배하면 0xE0 00 07 이 나온다.

 

개발환경때문에 1~16배 까지만 된다.

 

// test_qr.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
  unsigned char buf[20];

unsigned char rotate_shift(unsigned char shift_n,unsigned char shift_value)
{
  int i;
  for(i=0;i<shift_n;i++)
  {
    shift_value>>=1;
    if(shift_value==0)
      shift_value = 0x80;
  }
  return shift_value;
}
void ByteXNum(char nMux,unsigned char src_byte,unsigned char* ret_array)
{
  // 1바이트를 입력받아서 2~16배의 배열로 리턴하는  함수 
  int i,j=0,array_index = 0;;
  unsigned char calc_byte,k;
  unsigned char tmp_byte;

  int nMuxBit = 8*nMux;
  
  memset(ret_array,0,16);
  
  calc_byte = 0x80;

  for(k=0x80;k!=0x00;k>>=1)
  {
    if(src_byte&k)    
    {
      for(i=0;i<nMux;i++)
      {
        ret_array[j] |= calc_byte;
        calc_byte>>=1;
        
        array_index++;
        
        if(array_index>7){ 
          j++;
          calc_byte = 0x80;//tmp_byte;    
          array_index-=8;
        }
      }

    }
    else{    
      calc_byte = rotate_shift(nMux<8?nMux:nMux-8,calc_byte);
      
      array_index+=nMux;
      
      while(array_index>7){
        j++;
        array_index-=8;
      };
    }
  }

  /*for(i=0;i<16;i++)
    printf("0x%02x\n\r",ret_array[i]);
  */


}
int main(int argc, char* argv[])
{
  int a;
  const int copy_num = 4;
  const int width = 1;
  const int height = 8;
  unsigned char qr_buf[width*height];
  unsigned char tmp_buf[64*512];
  unsigned char *p;

  int i,j,k=0,l;
  
  p = tmp_buf;

  for(i=0;i<width*height/*72*/;i+=2){
    qr_buf[i]=0x81;
    qr_buf[i+1]=0x18;

    //if(i%3==0) qr_buf[i]=0xff;

  }
  
  if(width*8*16 > 512) printf("\n\r Size oVer!!! \n\r ");
  else{

    for(i=0;i<height;i++)
    {
      for(j=0;j<width;j++)
      {
        ByteXNum(copy_num,qr_buf[(i*width)+j],buf);
        memcpy(p,buf,copy_num);
        p+=copy_num;
        
      }
      
      for(l=0;l<copy_num-1;l++)
      {
        memcpy(p,p-(width*copy_num),width*copy_num);      
        p+=width*copy_num;
      }
    
    }
  }  
  
  //ByteXNum(16,0xfe,buf);
  printf("Hello World!\n");
  return 0;
}
728x90