hex 값으로 역수를 구하는 프로그램을 만들었습니다.
글쓴이: shint / 작성시간: 목, 2012/07/12 - 10:09오전
//
아침에 이런게 생각나서 만들어봤습니다.
제가 머리가 좋은건지. 아니면. 누가 암시로 알려주는건지... ㅡ_ㅡ;;; 누구나 다 아는건지 모르겠지만.
이렇게 되면 압축이나 암호화와 복호화가 쉽게 가능하게 되는데요.
이런걸 무슨 방식이라고 하나요?
생각해보니. 제가 착각했네요. a b c 값을 모르는데 말이죠. ㅡ_ㅡ;;; 어쩐지...
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef struct _CHAR
{
unsigned int n1:1;
unsigned int n2:1;
unsigned int n3:1;
unsigned int n4:1;
unsigned int n5:1;
unsigned int n6:1;
unsigned int n7:1;
unsigned int n8:1;
}SC; //struct char
//fn_hex_binary
unsigned char fn_h2b(unsigned char n)
{
SC sc;
sc.n1 = n>>0 & 0x01;
sc.n2 = n>>1 & 0x01;
sc.n3 = n>>2 & 0x01;
sc.n4 = n>>3 & 0x01;
sc.n5 = n>>4 & 0x01;
sc.n6 = n>>5 & 0x01;
sc.n7 = n>>6 & 0x01;
sc.n8 = n>>7 & 0x01;
printf("%d%d%d%d%d%d%d%d", n>>7 & 0x01, n>>6 & 0x01, n>>5 & 0x01, n>>4 & 0x01, n>>3 & 0x01, n>>2 & 0x01, n>>1 & 0x01, n>>0 & 0x01);
printf("\t");
printf("%x\n", sc);
unsigned char r;
memcpy(&r, &sc, 1);
return r;
}
int main(int argc, char* argv[])
{
unsigned char a = 0xA2;
unsigned char b = 0x43;
printf("fn_h2b(a )\t"); fn_h2b(a );
printf("fn_h2b(b )\t"); fn_h2b(b );
printf("fn_h2b((a|b)&a )\t"); fn_h2b((a|b)&a );
printf("fn_h2b((a&b)|a )\t"); fn_h2b((a&b)|a );
printf("fn_h2b((a^b)^a )\t"); fn_h2b((a^b)^a );
printf("fn_h2b((a|b)&b )\t"); fn_h2b((a|b)&b );
printf("fn_h2b((a&b)|b )\t"); fn_h2b((a&b)|b );
printf("fn_h2b((a^b)^b )\t"); fn_h2b((a^b)^b );
//역수 구하기
{
unsigned char a = 0xA0;
unsigned char b = 0xB1;
unsigned char c = 0xC2;
unsigned char d = 0xD3;
unsigned char e = 0xE4;
unsigned char t;
t = a; fn_h2b(t );
t = t^b; fn_h2b(t );
t = t^c; fn_h2b(t );
t = t^d; fn_h2b(t );
t = t^d; fn_h2b(t );
t = t^c; fn_h2b(t );
t = t^b; fn_h2b(t );
printf("\n");
}
//역수 구하기
{
unsigned char a = 0xBD;
unsigned char b = 0xB2;
unsigned char c = 0xCB;
unsigned char d = 0xBE;
unsigned char e = 0x9C;
unsigned char t;
t = a; fn_h2b(t );
t += a^1; fn_h2b(t );
t += b^2; fn_h2b(t );
t += c^3; fn_h2b(t );
t -= c^3; fn_h2b(t );
t -= b^2; fn_h2b(t );
t -= a^1; fn_h2b(t );
printf("\n");
}
//역수 구하기
{
unsigned char a[8] = {0xBD, 0xB2, 0xCB, 0xBE, 0x9C, 0xAC, 0xA4, 0x88};
unsigned char t=0;
int i=0;
for(i=0; i<8; i++)
{
printf("%d\t",i); t += a[i]^i; fn_h2b(t );
}
printf("\n");
//
printf("%d\t",i-1); fn_h2b(t ); //현재값 출력
for(i=8-1; i>0; --i)
{
printf("%d\t",i-1); t -= a[i]^i; fn_h2b(t );
}
printf("\n");
}
return 0;
}
//출력
fn_h2b(a ) 10100010 cccccca2
fn_h2b(b ) 01000011 cccccc43
fn_h2b((a|b)&a ) 10100010 cccccca2
fn_h2b((a&b)|a ) 10100010 cccccca2
fn_h2b((a^b)^a ) 01000011 cccccc43
fn_h2b((a|b)&b ) 01000011 cccccc43
fn_h2b((a&b)|b ) 01000011 cccccc43
fn_h2b((a^b)^b ) 10100010 cccccca2
10100000 cccccca0
00010001 cccccc11
11010011 ccccccd3
00000000 cccccc00
11010011 ccccccd3
00010001 cccccc11
10100000 cccccca0
10111101 ccccccbd
01111001 cccccc79
00101001 cccccc29
11110001 ccccccf1
00101001 cccccc29
01111001 cccccc79
10111101 ccccccbd
0 10111101 ccccccbd
1 01110000 cccccc70
2 00111001 cccccc39
3 11110110 ccccccf6
4 10001110 cccccc8e
5 00110111 cccccc37
6 11011001 ccccccd9
7 01101000 cccccc68
7 01101000 cccccc68
6 11011001 ccccccd9
5 00110111 cccccc37
4 10001110 cccccc8e
3 11110110 ccccccf6
2 00111001 cccccc39
1 01110000 cccccc70
0 10111101 ccccccbdForums:

