2016-10-11 5 views
-2

16 진수 값의 문자열이 있으며 함수 입력으로 사용할 수 있도록 char 배열로 출력해야합니다.16 진수 문자열을 char 배열로 변환

ffffff81 0D ffffffcb fffffff2 36 45 7F ffffffee 73 층 10 : SHA512 (firststring)의 출력 단

810dcbf236457fee732f100d261c101412e04fc08abd4cb6ddd4442a7cb690acfcae6eeec25e321d5cf5d63174a3b38b31c0143a5702f5f28a43f38b10742853

것이라고

std::string firststring = "baaaaaaa"; 
char bufferascii[128]; 
std::string firsthash = sha512(firststring); 
firsthash.copy(bufferascii, 128,0); 
char buffer[64]; 
for(int i=0; i<64; i++) { 
    char temp[4]; 
    temp[0] = bufferascii[i*2]; 
    temp[1] = bufferascii[(i*2)+1]; 
    temp[2] = 0; 
    int temp0; 
    sscanf(temp, "%x", &temp0); 
    buffer[i] = (char)temp0; 
    printf("%02x", buffer[i]); printf(" "); 
} 

참고 코드 대신 인쇄이고 0d 26 1c 10 14 12 ffffffe0 4f ffffffc0 ffffff8a ffffffbd 4c ffffffb6 ffffffdd ffffffd4 44 2a 7c ffffffb6 ffffff90 ffffffac fffffffc ffffffae 6e f 불행히도

unsigned char buffer[64]; 

:뿐만 버퍼 정의 할 때 fffffee ffffffc2 5E 32 1D 5C fffffff5 ffffffd6 31 74 ffffffa3 ffffffb3 31 ffffffc0 14 3A 57 02 fffffff5 fffffff2 ffffff8a 43 fffffff3 10 74 28 53

를 코드 작동 ffffff8b ffffff8b 그런 다음이 unsigned char 배열을 입력으로 char 배열이 필요한 다음 함수에 전달할 수 없습니다. 나는 이것이 내 컴파일러가 signed chars를 사용한다는 것을 가정한다.

무엇이 여기에 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

+2

'의 printf ("%의 02x"(서명 숯불) [I 완충액)' –

답변

1

아키텍처에 char 기호가 있습니다. 랭크가 int 미만인 모든 정수 유형은 가변 인수 함수로 전달 될 때 int 또는 unsigned int으로 승격됩니다. 서명 한 승진은 서명을 유지합니다. 그렇기 때문에 0xFFFFFF은 128 (0x80) 이상의 값으로 미리 조정됩니다.

하면, 또는, 더 좋은 unsigned charuint8_t을 값을 전송하여 표시 문제를 해결할 수

printf("%02x", (uint8_t)buffer[i]) 
+0

을 문제는 다음 함수에 입력하기 위해 부호있는 char 값이 필요하다는 것입니다. 올바른 값이 버퍼에 저장되어 있고 단지 디스플레이 문제일까요? – Phil

+0

그래서 인쇄 기능에 대해서만 캐스팅을 제안합니다. 데이터가 정확하지만 표준 출력으로가는 도중 (응답에 설명 된대로) 수정됩니다. – krzaq

관련 문제