2013-03-11 6 views
3

Я видел много вопросов вокруг этого, но пока никто не работал для меня.Преобразование unsigned char [10] в QBytearray;

Я пробовал 2 наиболее распространенных ответа, но получаю ту же ошибку.

быть но unsigned char buf[10];

это,

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

или это,

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

получил мне ту же ошибку,

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

любой совет?

спасибо

ответ

5

Это просто знаковость вопрос, так что это должно работать:

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

Или с унаследованным C-стиль гипсом:

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

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

Легче альтернатива удалить unsigned из объявление buf, если вам это не нужно по другой причине.

Обратите внимание, что если вы используете этот метод fromRawData, он не копирует байты, поэтому лучше быть уверенным, что buf не скоро выйдет за рамки. Если вы не уверены, не используйте его ...

+0

ну, мне это нужно. Я получаю 'error: invalid static_cast from type 'unsigned char [10]' для ввода 'char *'' – SamuelNLP

+0

@SamuelNLP Отредактированный ответ. – 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 * и передать данные из' buf' сначала в массив, а затем преобразовать его? – SamuelNLP

Смежные вопросы