2013-03-11 2 views
3

나는이 문제에 대해 많은 질문을했지만 지금까지 아무도 나를 위해 일하지 못했습니다.부호없는 char [10]을 QBytearray로 변환합니다.

나는 2 개의 가장 일반적인 대답을 시도했지만 동일한 오류가 발생합니다. ,

QByteArray databuf; 
databuf = QByteArray::fromRawData(buf, 10); 

또는이를

되고 있지만 unsigned char buf[10];

QByteArray databuf; 
databuf = QByteArray(buf, 10); 

나에게 같은 오류를 가지고

error: invalid conversion from 'unsigned char*' to 'const char*' [-fpermissive]

,

어떤 조언이 필요합니까?

는 말한대로 당신이

답변

5

그냥 부호의 문제, 그래서이 작동합니다 :

databuf = QByteArray((char*)buf, 10); 

(Here's one of many many discussions about which you should use.)

쉬운 대안에서 unsigned을 제거하는 것입니다 :

databuf = QByteArray(reinterpret_cast<char*>(buf), 10); 

또는 기존의 C 스타일 캐스트 buf의 선언이 필요합니다. 다른 이유로는 필요하지 않습니다.

해당 fromRawData 메서드를 사용하는 경우 바이트를 복사하지 않으므로 buf이 너무 빨리 범위를 벗어나지 않도록주의하십시오. 확실하지 않으면 그것을 사용하지 말아라. ...

+0

잘 나는 그것을 필요로한다. '오류 : unsigned char [10] '유형에서'char * '' – SamuelNLP

+0

@SamuelNLP 수정 된 답변 유형으로 static_cast가 유효하지 않습니다. – hyde

+0

편집되지 않은 답변으로'static_cast'가 사용되었습니다. 왜 작동하지 않는지에 대한 링크 된 질문이 있습니다 : http://stackoverflow.com/questions/10151834/why-cant-i-static-cast-between-char-and-unsigned-char – hyde

1

, fromRawData에 전달 된 인수가 const char* 아닌 unsigned char*해야합니다 감사합니다. 당신은 당신의 배열 const char의 배열 할 수있다 :

const char buf[10]; 

배열은 자사의 첫 번째 요소에 대한 포인터로 변환 할 수있는 의지가 const char*, exacly로 fromRawData 기대하고있다.

+0

나는 새로운'char * array'을 생성하고'buf'의 데이터를 먼저 배열에 전달한 다음 그것을 변환해야합니까? – SamuelNLP