2012-01-20 4 views
1
QByteArray inArray = " ... "; 
unsigned char *in = convert1(inArray); 
unsigned char *out; 
someFunction(in, out); 
QByteArray outArray = convert2(out); 

질문은 어떻게하면 변환 (convert1 및 convert2)을 올바르게 수행 할 수 있습니까? someFunction (unsigned char *, unsigned char *)을 변경할 수 없지만 여기서 QByteArray를 사용해야합니다.QByteArray가 unsigned char *로 변환됩니다.

답변

5

Qt는 정말 큰 docs입니다. 사용하는 것이 좋습니다.

SomeFunction을 수정하거나 데이터에 당신이 사용할 수에 저장 포인터하지 않는 경우 :

QByteArray inArray = " ... "; 
unsigned char *out; 
someFunction((unsigned char*)(inArray.data()), out); 
QByteArray outArray((char*)out); 

그렇지 않으면 당신은 문자 * (QByteArray :: 데이터에 의해 반환)의 깊은 복사 할 수 있습니다 (참조 코드 스 니펫에 대한 문서). someFunctionconst char* 인수 걸리는 경우

+0

'QByteArray outArray = QByteArray :: fromRawData (교체 아웃, 나 strlen (교체 아웃));'사용하지 않을 경우'out'을. – graphite

+0

fromRawData를 사용하면 "unsigned char * '에서'const char * '로의 잘못된 변환이 발생합니다. 그래서 QByteArray :: fromRawData 시도 (reinterpret_cast (개), part.length()). – Eddie

+0

chalup에 의한 해결책은 좋을 것 같아서 전에 시도했지만 오류가 있습니다. 외관상으로는 케이스는 다른 것에서있다. – Eddie

0

그럼 그냥 QByteArray 클래스 ConstData() 또는 data()을 사용합니다.

char*이 필요하면 strdup()를 사용할 수 있습니다. 이 방법은 여기

char *strdup (const char *s) { 
    char *d = malloc (strlen (s) + 1); // Space for length plus nul 
    if (d == NULL) return NULL;   // No memory 
    strcpy (d,s);      // Copy the characters 
    return d;       // Return the new string 
} 

더 많은 정보를하고있다 : strdup() - what does it do in C?

+0

그것은 const가 아닙니다. 그것은 서명되지 않은 것입니다. – user1319829

관련 문제