2016-07-13 1 views
2

입력으로 unsigned char*을 사용하는 함수가 있습니다.정수를 unsigned char * (int 221에서 " xdd")로 변환

말 내가 가지고 예를 들어 :

unsigned char* data = (unsigned char*) "\xdd"; 
int a = 221; 

는 어떻게이 a이 구별 변환 adata 그러한 unsigned char*에 내 정수 변환 할 수 있습니까? sprintf로 놀아 보려고했지만 행운도없이 "\ x"부분을 처리하는 방법을 모르겠습니다.

+1

'sprintf()'와 같이, 'unsigned char res [5]; sprintf (res, "\\ x % 02x", a & 0xff);'(a의 하위 바이트 만). 어쩌면 당신은 형식 문자열의'\\ x' 부분을 놓쳤을까요? 그래도 다른 방법이 있습니다 ... – Dmitri

답변

3

char 유형에 대한 유효 값으로 보장 할 수 없습니다, 당신이 할 수있는 가장 가까운 것입니다 : 여기

int a = 221; 
unsigned char buffer[10]; 
sprintf((char*)buffer, "%c", a); 

는 예제 프로그램입니다 및 출력 :

#include <stdio.h> 

int main() 
{ 
    unsigned char* data = (unsigned char*) "\xdd"; 
    int a = 221; 
    unsigned char buffer[10]; 
    sprintf((char*)buffer, "%c", a); 
    printf("%d\n", buffer[0] == data[0]); 
    printf("%d\n", buffer[0]); 
    printf("%d\n", data[0]); 
} 

출력 :

1 
221 
221 

업데이트

아마도 귀하의 질문에 대한 오해가있었습니다. 다음과 같이 쓸 수도 있습니다 :

int a = 221; 
unsigned char buffer[10] = {0}; 
buffer[0] = a; 
1

위와 같이 질문하는 것이 의미가 없으며 불가능합니다. 포인터 유형 인 const char *으로 실제로 변환하고 싶지는 않습니다. 대신 char의 배열로 변환 한 다음 이름을 사용하여 해당 배열의 주소를 가져 오려고합니다. 221 이후

int x = 221; 
char buf[5]; 
snprintf(buf, sizeof buf, "\\x%.2x", x); 
/* now pass buf to whatever function you want, e.g.: */ 
puts(buf); 
+0

바라 건데'0 <= x <256', 그렇지 않으면'buf []'가 오버플로합니다. – chux

+0

@chux : 아니요, 사용되지 않는'sprintf' OP가 아니라 올바른 함수 인'snprintf'를 사용했기 때문에 잘립니다. 맥락에서 정수가 바이트 값을 나타 내기로되어 있다고 생각했지만, 그렇지 않다면 꼭 큰 버퍼를 사용하십시오. –

+1

다른 대답을 바탕으로, 비록 이것이 OP가 원했던 것조차 확실하지는 않습니다. –

관련 문제