Статьи Галерея Форум Чат Файлы HowTo Ссылки Поиск
Текущее время: 02 апр 2020, 02:42




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: c++ и переменные
СообщениеДобавлено: 14 фев 2004, 17:19 
Такой вот вопрос:
как быстрее всего перебросить данные
из char[4] в int
или из char[2] в short
а также наоборот.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 14 фев 2004, 18:56 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 25.07.2003
Сообщения: 623
Откуда: Minsk
atoi() не подходит??? :shock:

_________________
Never touch the running program!!!


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 14 фев 2004, 19:07 
Маньяк
Аватара пользователя

У нас с: 10.07.2002
Сообщения: 185
Откуда: Минск
Код:
#include <iostream>

int main(void)
{
  char a[4] = {'1','2','3','4'};
  char b[2] = {'1','2'};
  int c;
  short d;

  c = *((int*)a);
  d = *((short*)b);
  strncpy(a, (char*)&c, 4);
  strncpy(b, (char*)&d, 2);
  std::cout << c << std::endl;
  std::cout << d << std::endl;
  std::cout << a[0] << a[1] << a[2] << a[3] << std::endl;
  std::cout << b[0] << b[1] << std::endl;
  return 0;
}

_________________
- Говорят, пингвин - это ласточка разжиревшая от лени?
- Нет. Это ласточка беременная мыслью.


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 14 фев 2004, 21:25 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 28.11.2003
Сообщения: 861
Откуда: Минск
Вообще если по сети передавать планируешь, то есть макросы:
htons, htonl, ntohs, ntohl

Можешь ипользовать union, но это непереносимо на
другие архитектуры.

union toInt
{
char data[4];
int val; // short, long
};

Будь осторожен, int бывает от 2 до 8 байт (может и больше, не встречал).
Есть только одно правило:

sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

Вставь у себя в коде, если я правильно догадался про твою
архитектуру

assert(sizeof(int) == 4);
assert(sizeof(short) == 2);

Или поменяй на свои значения


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 16 фев 2004, 14:32 
тогда немного другой вопрос!
char ch1[8];
short sh;
base_ifstream<char> file("1.dat");
file.read((char*)(ch1),sizeof(ch));
file.read((char*)(&sh),sizeof(sh));
^^^^^
Проблема в том, что при записи в sh значение переворачивается, т.е. первый байт из файла считывается в МЛАДШИЙ байт sh, а второй (т.к. sizeof(short)==2)
- в старший байт, может кто знает как сделать считывание правильным?
PS: Важна скорость считывания.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 16 фев 2004, 15:24 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 28.11.2003
Сообщения: 861
Откуда: Минск
Гость,

Именно для такого использования и изобретены макросы
htons, htonl, ntohs, ntohl :)

Они переводят данные в network format и обратно.

Пользуйся ими при записи в файл и при чтении.


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
[ All resources are available under GNU GPL ] [ Support ] [ Hosted by DataHata | MyCloud.by ] [ Powered by phpBB® Forum Software © phpBB Group ]

LVEE Winter LVEE Rambler's Top100