crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Беззнаковые байты в QByteArray
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Алексей1153 Дата 10.10.2010, 19:31
 
Цитата(BRE @ 10.10.2010, 22:23) *
Ну так ССЗБ.

чиво ругаесси ? ))
BRE Дата 10.10.2010, 19:23
 
Цитата(Алексей1153 @ 10.10.2010, 20:21) *
Цитата(BRE @ 10.10.2010, 22:18) *
А почему с uchar нормально, а с char нет?

смотри самый первый пост этой темы. Вот почему

Ну так ССЗБ. ;)
Цитата
А так есть же и QVector<uchar>.
Алексей1153 Дата 10.10.2010, 19:21
 
Цитата(BRE @ 10.10.2010, 22:18) *
А почему с uchar нормально, а с char нет?

смотри самый первый пост этой темы. Вот почему
BRE Дата 10.10.2010, 19:18
 
Цитата(Алексей1153 @ 10.10.2010, 20:12) *
вот это я бы написал сразу нормально
std::vector<uchar> arr;

А почему с uchar нормально, а с char нет? :)
QByteArray в Qt часто используется как инструмент для работы с обычными сишными строками, поэтому и заточен для работы char.
А так есть же и QVector<uchar>.

Алексей1153 Дата 10.10.2010, 19:12
  да я понимаю, откуда минус берётся:

129 == 0x81
если это char , то при увеличении размерности знак (0x80) тоже расширяется и получается 0xFFFFFF81 , что и есть 4294967169

а всё остальное - это лишь представление

мне другое дико - если работаешь с байтом, зачем там char, а не unsigned char. Отсюда и глюки.

Цитата(BRE @ 10.10.2010, 22:07) *
std::vector<char> arr;

вот это я бы написал сразу нормально
std::vector<uchar> arr;
BRE Дата 10.10.2010, 19:07
  Дело вовсе не в QByteArray и не в STL.
Попробуй такой код, эффект будет таким же:
#include <iostream>
#include <vector>

int main ( int argc, char *argv[] )
{
    std::vector<char> arr;
    arr.push_back( 129 );
    
    unsigned b = (unsigned)arr[0];
    std::cout << b << std::endl;
    
    return 0;
}


Если преобразовать b к signed, то станет понятно, что число 4294967169 как раз обозначет -127.
Алексей1153 Дата 10.10.2010, 18:56
  BRE, да, в отладчике зыркнул, расширяет знак :) Не могу понять, только, почему.

зато явное преобразование к незнаковому char работает
unsigned b = (uchar)arr[0];

скорее всего корявая работа оператора [] , который возвращает не просто char , а QByteRef , я уж не стал дальше копать, что он там вертает (скорее всего int)

ещё один довод в пользу использования STL :)
BRE Дата 10.10.2010, 17:43
 
Цитата(Алексей1153 @ 10.10.2010, 16:48) *
тоже должно было получиться

Не должно. :)
Алексей1153 Дата 10.10.2010, 15:48
 
Цитата(rcdimon @ 10.10.2010, 17:05) *
unsigned b = (uint)arr[0];
Не получалось. а почему?

тоже должно было получиться
rcdimon Дата 10.10.2010, 14:05
 
unsigned b = (uchar)arr[0];


Хм. и правда работает. а я пробовал

unsigned b = (uint)arr[0];

Не получалось. а почему?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 15.7.2025, 2:17