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 ccccccbd
Forums: