2013-04-27 3 views
-5

서식있는 질문 아래 코드를 가지고있는 질문은 sprintf를 사용하는 곳입니다. 형식화 된 int를 삽입해야합니다. 클라이언트가 데이터를 선택하고 char 배열에 따라 데이터를 추출하기 때문입니다. 따라서 클라이언트는 수신 코드에서 [0]과 [1]의 지연을 선택합니다. 다른 변수가 다른 비트의 코드에서 전송 된 [2]와 [3]에서 가져온 것일 수 있습니다. printf와에서 같은 포맷하는 방법C에서 SprintF 서식 지정

int sock = *(int*)data->sock; 
int i,startDelay =0; 
char buffer[SEND_MESSAGE_LENGTH]; 
puts("Run Machine Called"); 
for(startDelay=11;startDelay>=0;startDelay--) 
{ 
    printf("Start Delay:%i\n",startDelay); 
    sprintf(buffer,"%2i",startDelay); 
    printf("Send Data - %2i - Start Delay\n",*buffer-'0'); 
    //write_sock(sock,buffer); 
    sleep(1); 
} 
+0

무엇? 왜'sprintf (buf, "% i", 42);'가 충분하지 않습니까 (** 버퍼 오버 플로우 취약점 ** 제외)? –

+0

숫자 0을 왼쪽에서 채워 넣고 싶다면 "% 02d"형식을 시도하십시오 ... 그러나 많은 질문을 이해하지 못합니다 ... –

+0

기본적으로 클라이언트는 서버에서 읽을 때마다 11 0을 수신해야합니다. . 첫 번째 2는 서버의 변수이고 두 번째 변수는 다른 변수를 설정하는 식입니다. startDelay를 char []에 넣는다면 2 슬롯을 채우기 위해 '09'가 필요한 '9'가 될 수 있습니다. – Lacko

답변

0

나는 확실하지 않다, 그러나 나는 당신이 무슨 말을 생각 숯불 []에 저장하는 무엇인가 2 바이트 (16 비트) 정수 값. 그렇다면 sprintf이 작업에 적합한 도구가 아닙니다. 대신, 당신은 정수를 타고 마스크와 16 비트 추출하기 위해 이동해야합니다 당신의 값이 255보다 작은 때문에, 물론

buffer[0] = startDelay & 0xFF; // low byte 
buffer[1] = (startDelay >> 8) & 0xFF; // high byte 

그것을가 간단하므로, 여기에 상위 바이트는 항상 0이됩니다 :

buffer[0] = startDelay & 0xFF; 
buffer[1] = 0; 

그것은 당신이이 역 할과 buffer[0]의 상위 바이트와 buffer[1]의 하위 바이트를 넣을 수 있도록 바이트 순서가 있어야한다 무엇을 나에게 분명하지 않다.