crossplatform.ru

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


  Ответ в использование ntohs в Qt под линух
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 10 сообщений [ в обратном порядке ]
Гость Дата 16.5.2010, 17:28
 
Цитата(dimon11782 @ 7.5.2010, 20:03) *
[b]char *buf[100];
Тут косяк с типом. - не `char *' а 'char'. А еще лучше - uchar.

пишется так:

#include <QtEndian>

...
quint16_t x = qFromBigEndian<quint16_t>((const uchar*)buf);
igor_bogomolov Дата 11.5.2010, 8:37
 
Цитата(dimon11782)
у меня нет числа целиком, а еcть только адрес расположения его байтов...как быть?

int atoi ( const char * str );
long int atol ( const char * str );
double atof ( const char * str );

long int strtol ( const char * str, char ** endptr, int base );
unsigned long int strtoul ( const char * str, char ** endptr, int base );
double strtod ( const char * str, char ** endptr );

boost::lexical_cast
Litkevich Yuriy Дата 11.5.2010, 1:10
 
Цитата(dimon11782 @ 11.5.2010, 2:58) *
...как быть?
как я показал
dimon11782 Дата 10.5.2010, 22:58
  igor_bogomolov: спасибо конечно за пример, но у меня нет числа целиком, а еcть только адрес расположения его байтов...как быть?
Litkevich Yuriy Дата 10.5.2010, 2:23
 
Цитата(dimon11782 @ 10.5.2010, 4:19) *
но уж коли для таких целей уже есть стандартные функции
как я понимаю, данные у тебя в неком буфере, а не в виде целого числа, коль скоро тебе придётся их побайтно вынимать из буфера, то ты ничего не выиграешь применяя стандартные функции
igor_bogomolov Дата 10.5.2010, 0:52
 
#include <QtEndian>
#include <cstdio>

int main()
{
    int bigEndian = 0xFF92;
    int litleEndian = qFromBigEndian(bigEndian);

    printf("bigEndian = %#x \n", bigEndian);
    printf("litleEndian = %#x \n", litleEndian);

    return 0;
}


Цитата(вывод)
bigEndian = 0xff92
litttleEndian = 0x92ff0000
dimon11782 Дата 10.5.2010, 0:19
  Litkevich Yuriy: да с самодельным примером мне все понятно - но уж коли для таких целей уже есть стандартные функции, то почему бы ими не воспользоваться и зачем городить свои?

igor_bogomolov: дайте пож-та пример чик на использование приведенных В Вашей ссылке методов для перекрутки числа, допустим, 0xFF92 (я что-то не совсем понял какая из приведенных в ссылке функций за что отвечает и как ее надо корректно использовать?)...
igor_bogomolov Дата 9.5.2010, 1:36
  <QtEndian> - Endian Conversion Functions
Litkevich Yuriy Дата 8.5.2010, 22:42
 
Цитата(dimon11782 @ 8.5.2010, 0:03) *
Само число я не имею, а имею только адреса ячеек памяти, где оно лежит – то есть надо как-то ”сложить” его 2 разряда (см. код выше)
всё таки байта?
Вообще задачка по Си простейшая.
char *buf[100]; // Если данные лежат так:  0xFF35 -> 0x35 0xFF
unsigned short  res;
unsigned char tmp;
tmp = (unsigned char)*buf[i]; // берём 0x35
res = ((unsigned short)tmp) << 8; // двигаем 0x35 на 8 бит влево, чтобы было старшим байтом
tmp = (unsigned char)*buf[i+1]; // берём 0xFF
res |= tmp; // дописываем в младший байт 0xFF
// теперь res = 0x35FF
dimon11782 Дата 8.5.2010, 22:26
  так что по поводу решения обозначенной в начале темы проблемы?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 16.4.2024, 18:22