Typecast массив шорт в байтовый массив - PullRequest
2 голосов
/ 17 февраля 2012

Я пытаюсь преобразовать короткий массив в байтовый массив в qt.есть ли какая-либо функция для выполнения кастинга.если я должен использовать const char * для преобразования, как я должен это сделать.и есть ли лучший способ, чем использовать реинтерпретацию приведение

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Вы можете преобразовать массив коротких данных в байты, просто приведя байтовый указатель к короткому массиву

short s[10];
unsigned char *p = reinterpret_cast<unsigned char*>(s);

, а затем используйте указатель для просмотра всех байтов в массиве, куда вы копируете *p в байтовый массив, если хотите.

for ( unsigned char *p = reinterpret_cast<unsigned char*>(s); 
      p < s + sizeof(s); 
      ++p)
{...}
0 голосов
/ 17 февраля 2012

Вы можете использовать reinterpret_cast для этого, но имейте в виду, что вы делаете свой код очень специфичным для архитектуры. Использование reinterpret_cast точно не гарантирует, что ваш код неверен, но это должны быть предупреждающие звонки.

Если вы хотите, учитывая массив шортов, создать массив байтов с одинаковыми значениями, вы, вероятно, захотите следующее:

void copy(char *to_byte_array, short const *from_short_array, std::size_t size)
{
    for (std::size_t pos = 0; pos != size; ++pos)
    {
         to_byte_array[pos] = from_short_array[pos];
    }
}

если вы используете reinterpret_cast, ваш короткий массив, содержащий, скажем, 20, 30, 40, будет выглядеть как массив символов, содержащий 0, 20, 0, 30, 0, 40 (или, возможно, 20, 0, 30, 0, 40 , 0, в зависимости от архитектуры).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...