2014-02-17 3 views
0

(AES 암호화에서) 암호문을 16 진수 값으로 변환하려고합니다.문자를 16 진수로 변환

나는 변환 (상태가 암호문) 다음 코드를 사용하고이 암호문에 대한

foreach(char *v, state) { 
    printf("%02X", *v); 
}  

:

2734FFFFFFA5575BFFFFFF99FFFFFFFAFFFFFFCB6A240BFFFFFFD318FFFFFFB65536 
:

'4¥W[™úËj$Ó¶U6 

나는이 출력을 얻을

이 암호문에 올바른 16 진수 형식이 아닙니다. 나는 같은 결과를 가져 오는 다른 변환 방법을 시도했다.

편집 : foreach는 코드 :

#define foreach(item, array) \ 
for(int keep = 1, \ 
count = 0,\ 
size = sizeof (array)/sizeof *(array); \ 
keep && count != size; \ 
keep = !keep, count++) \ 
for(item = (array) + count; keep; keep = !keep) 
+1

부호없는 값이 필요합니다. 그렇지 않으면 부호 비트가 확장됩니다. '* v'를'unsigned char'로 변환하십시오. – WhozCraig

+1

'foreach' 매크로는 최소한 유지 보수가 가능한 코드 상을받을 수 있습니다. – unwind

+0

이것은 매크로를 사용하는 아주 나쁜 방법입니다. 'sizeof * (array)'라는 정의 안에 적어도 하나의 에러가 있고,'foreach (char * v, state)'를 호출하는 방식에서 하나의 에러가 있다는 사실 외에도, 당신이 그 안에서 무엇을하려고하는지 이해하십시오. 정상적인 함수로 작성하면 문제가 드러날 가능성이 높습니다 (그렇지 않은 경우 코드를 쉽게 디버깅하여 찾을 수 있음). –

답변

1

C 아니다, 그것은 ++ C 수 있습니다 C.에는 foreach가 없다는이 경우 문제는 인수 printf()%x 변환 지정이 있다는 것이다 기호 확장. 플랫폼에 char 유형의 서명이있을 가능성이 큽니다.

값을 unsigned char으로 전송하십시오.

+0

사실, foreach 매크로를 추가하는 것을 잊었습니다. – pattex007