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);
私が知っている限り、私はそれを乱すことはありません。読み込み直後にブレークポイントを置き、バッファを検査すると、0x3fを超える値は '?'に設定されます。 – user862821
また、私はそれを文字列としてデコードすることには興味がありません。私は変更されていない16進値がほしいだけです。 – user862821
Windows側で使用していたテストツールのように、送信前にバイト値を切り捨てていたようです。 GUIはそれを示していませんでしたが。 SimpleComツールのこの問題に注意してください。 – user862821