2011-07-26 8 views
0

私のPCアプリケーションから、自分のiPhoneにソケットデータを送信しています。データが到着すると、符号なし(uint8)ではなく符号付きの値として格納されます。だから私は上記の127の値を得ることができません。iPhone:CFReadStreamReadで、符号なしで署名されたバイトを格納する

0xFFを送信すると0x3fに戻ります。

CFReadStreamReadはASCII文字のみを対象としていますか?もしそうなら、何が代わりになるでしょうか?

マイコード:

CFReadStreamRef readStream = NULL; 
CFWriteStreamRef writeStream = NULL; 
CFIndex bytes; 
UInt8 buffer[128]; 
UInt8 recv_len = 0; 
UInt8 send_len = 0; 

// 
//Get the native socket that was used 
CFSocketNativeHandle sock = *(CFSocketNativeHandle*)data; 


// 
//Create the read and write streams for this socket 
CFStreamCreatePairWithSocket(kCFAllocatorDefault, sock, &readStream, &writeStream); 

// 
//Check for errors 
if (!readStream || !writeStream) 
{ 
    close(sock); 
    fprintf(stderr, "CFStreamCreatePairWithSocket failed."); 
    return; 
} 

// 
//Open the streams 
CFReadStreamOpen(readStream); 
CFWriteStreamOpen(writeStream); 

// 
//Read the command bytes 
short command = 0; 

memset(buffer, 0, sizeof(buffer)); 
bytes = CFReadStreamRead(readStream, buffer, 12); 

答えて

1

0x3fはASCII '?'です。バイトバッファをUTF-8文字列としてデコードしようとしていますか?もしそうなら、あなたの問題があります。 CFReadStream APIはデータを乱すことはまずありません。あなたがいる可能性はずっと高いです。

+0

私が知っている限り、私はそれを乱すことはありません。読み込み直後にブレークポイントを置き、バッファを検査すると、0x3fを超える値は '?'に設定されます。 – user862821

+0

また、私はそれを文字列としてデコードすることには興味がありません。私は変更されていない16進値がほしいだけです。 – user862821

+0

Windows側で使用していたテストツールのように、送信前にバイト値を切り捨てていたようです。 GUIはそれを示していませんでしたが。 SimpleComツールのこの問題に注意してください。 – user862821

関連する問題