iPhone: CFReadStreamRead хранит байты как подписанные, а не без знака - PullRequest
0 голосов
/ 26 июля 2011

Из приложения на ПК я отправляю данные о сокете на мой iPhone.Когда данные поступают, они сохраняются в виде значения со знаком, а не без знака (uint8).Поэтому я не могу получить значения выше 127.

Когда я отправляю 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 Ответ

1 голос
/ 26 июля 2011

0x3f - это ASCII '?'.Вы пытаетесь декодировать байтовый буфер как строку UTF-8?Если так, то есть ваша проблема.API CFReadStream вряд ли будет портить данные;гораздо более вероятно, что вы есть.

...