ページ 11

Winsockでの文字列送信について

Posted: 2011年7月31日(日) 21:11
by shiro4ao
Winsockで通信するプログラムを書いています。
送信する際に、

コード:

send(sock,"\x04\x01\x1a\x0a\x7f\x00\x00\x01\x4d\x4f\x5a\x00",100,0);
とかいて送信するとうまく通信できるのですが、

コード:

char packet[100] hp1[5],hp2[5],n1[5],n2[5],n3[5],n4[5]; 
	strcpy(hp1,"1a");
	strcpy(hp2,"0a");
	strcpy(n1,"7f");
	strcpy(n2,"00");
	strcpy(n3,"00");
	strcpy(n4,"01");

        sprintf(packet,"\x04\x01\%s\x%s\x%s\x%s\x%s\x%s\x4d\x4f\x5a\x00",hp1,hp2,n1,n2,n3,n4);

        send(sock,packet,20,0);
とすると、うまく通信できなくなります

\xの意味が直接打ち込む時と、バッファに書いてある時とで違っているような気がします。
どのようにすれば、下のコードでも同じパケットを作れるようになりますか?
ご回答いただければ幸いです。

Re: Winsockでの文字列送信について

Posted: 2011年7月31日(日) 21:29
by みけCAT
こんな感じでしょうか?

コード:

char packet[100] hp1,hp2,n1,n2,n3,n4; 
    hp1=0x1a;
    hp2=0x0a;
    n1=0x7f;
    n2=0x00;
    n3=0x00;
    n4=0x01;
 
        sprintf(packet,"\x04\x01\%c\%c\%c\%c\%c\%c\x4d\x4f\x5a\x00",hp1,hp2,n1,n2,n3,n4);
 
        send(sock,packet,20,0);

Re: Winsockでの文字列送信について

Posted: 2011年8月01日(月) 00:09
by shiro4ao
数値の16進数への変換方法がわからなかったのですが、
strtol関数を使うことで解決できました。

残りの部分はみけCATさんのコードでうまくいきました。
これにて解決とさせて頂きます。
ありがとうございました。