2011-07-26 4 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 문자열로 디코딩하려고합니까? 그렇다면 문제가 있습니다. API CFReadStream은 데이터를 망칠 가능성이 거의 없습니다. 당신이 훨씬 더 가능성이 높습니다.

+0

내가 아는 한 내가 그걸 망치고 있지 않다. 읽기 바로 뒤에 중단 점을 넣고 버퍼를 검사하면 0x3f 이상의 값이 '?'로 설정됩니다. – user862821

+0

또한 문자열로 해독하는 데 관심이 없습니다. 난 그냥 변하지 않은 16 진수 값을 원한다. – user862821

+0

윈도우 측에서 사용하고있는 테스트 도구가 바이트 값을 보내기 전에 잘라내는 것처럼 보입니다. GUI가 그러한 표시가 아니었지만. SimpleCom 도구에서이 문제를 조심하십시오. – user862821

관련 문제