2014-01-20 3 views
0

저는 C를 배우고 있는데, sscanf에 대해 알 수없는 것이 있습니다. 버퍼에 인쇄 할 때 쓰여지는 데이터가 없으며 항상 -1로 실패합니다. 두 번째 printf 문을 보면 화면에 내 데이터를 명확하게 볼 수 있으므로 포인터가 무엇인지 알 수 없으므로 아무 것도 없습니다.sscanf가 제대로 쓰여지지 않습니다.

다음은 내 코드 스 니펫입니다.

char *v = (char*)&int_value; 
int i; 
for(i=0;i<sizeof(unsigned int);i++) 
{ 
    printf("sscanf success: %d ", sscanf(&v[i], "%02x", &buffer[pos+i])); 
    printf("%02x\n", v[i]); 
} 

덕분에, 난 그냥 당신은 int 값이 어떻게 든 유형 캐스트에 의해 ASCII로 변환 한 것으로 가정합니다 지금 buffer[pos+i] = v[i];

+0

어떻게 '버퍼'가 정의 되었습니까? '& v [i]'는 잘못된 일을하고있는 것처럼 보입니다.'v'의 포인터를'i'의 위치에 억세스하고 그 포인터를 그 위치로 가져가는 이유는 무엇입니까? – nrathaus

+2

함수'sscanf'는 실제 문자열을 첫 번째 인수로 기대합니다. – cnicutar

+0

'buffer'는 char *입니다. 그러나 sscanf ("0f", "% 02x", & buffer [pos + i])와 같은 실제 문자열을 사용하면 괜찮습니다. 대신 어떤 기능을 사용해야합니까? – enigma99a

답변

0

바이트로 바이트를하고있는 중이 야,하지만 그래서 sscanf를이 실패하지 않습니다. sscanf는 유효한 C 문자열을 필요로합니다. char* p = "02";하지만 int 형을 입력하면 숫자의 실제 바이트 표현을 얻습니다. 예를 들어 중간에 문자열을 종료하는 0이있을 수 있습니다.

예. int 값이 8이면 메모리에 다음과 같이 표시됩니다. 00 00 10 00 (또는 00h 08h - 정확히 보이는 모양은 아키텍처에 따라 다릅니다.)

+0

리틀 엔디안 16 진수를 10 진수로하여 버퍼에 저장하려고합니다. 어떻게하면 이걸 가장 잘 수행 할 수 있을까요? – enigma99a

+0

당신은 이미 특정 순서대로 printf를 사용하여 16 진수 값을 출력하고 있습니다. OS가 크거나 작은 엔디안입니까? 리틀 엔디안이라면 바이트 단위로 버퍼에 복사하는 것입니다. 그렇지 않으면 노동 조합을 사용할 수 있습니다. 'typedef union {unsigned int n; 부호없는 char b [4]; } uu' 그럼 그냥 스왑 바이트 –

+0

예, 작동하지만 버퍼로 데이터를 가져 오는 방법을 잘 모르겠습니다. 도와 주셔서 감사합니다, 또한 OS가 리틀 엔디안입니다 – enigma99a

관련 문제