Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перевод данных в набор байтов 
:(
    Опции темы
Graf_h
Дата 27.5.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



Цитата(azesmcar @  27.5.2009,  18:57 Найти цитируемый пост)
У вас неправильное представление о хранении чисел в памяти.

почему не правильное, байт это от 0 до 255, правильно?? вот мне м нужно число типа инт представить в виде масиво байтов,  а не битов. я же вивожу один байт а не бит.



--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
mes
Дата 27.5.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Graf_h @  27.5.2009,  17:56 Найти цитируемый пост)
ведите число 257 и выведите на экран: должно быть 0#0#2#255 а у вас дает непонятно что:( 

интересно, а какое число тогда представлено так 255#255#255#255 ?
следуя Вашей логике 1020 ? и это в 4х байтах! а ведь комп умудряется в 2х байтах хранить числа от 0-65535 smile
поэтому советую Вам начать с книжки о представлении чисел в памяти эвм.


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 27.5.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Graf_h @  27.5.2009,  19:04 Найти цитируемый пост)
почему не правильное, байт это от 0 до 255, правильно?? вот мне м нужно число типа инт представить в виде масиво байтов,  а не битов. я же вивожу один байт а не бит.

потому что данные в компьютере хранятся в двоичном формате.
в итоге 257 хранится в памяти как
  1 байт       2 байт       3 байт     4 байт
00000000 00000000 00000001 00000001

3 и 4 байт - равны единице.
PM   Вверх
Graf_h
Дата 27.5.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



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


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
mes
Дата 27.5.2009, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



хотите увидеть #0#0#2#255
то и оперрируйте с этим числом :
Код

int i= 0<<24 +0<<16+2<<8 +255;
//или
int i = 0x000002ff; // 0хff == 255 



--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 27.5.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Graf_h @  27.5.2009,  19:07 Найти цитируемый пост)
mes, я просто хочу получить значение каждого из байтов и записать их вмасив передать по сети, а там вобратно восстановить 

Код

int main()
{
    int v = 257; //наше число
    char temp[sizeof(int)]; //наш буфер
    memcpy(temp, &v, sizeof(int)); //копируем в буфер
    int t; //новое число
    memcpy(&t, temp, sizeof(int)); //восстанавливаем из буфера

    printf("%d\n", t); //печатаем число - 257
}


Добавлено @ 19:14
Цитата(Graf_h @  27.5.2009,  19:07 Найти цитируемый пост)
передать по сети

я так понимаю о проблемах big-endian, little-endian пока думать рано?

Это сообщение отредактировал(а) azesmcar - 27.5.2009, 19:15
PM   Вверх
Graf_h
Дата 27.5.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



mes, 
Цитата(mes @  27.5.2009,  19:07 Найти цитируемый пост)
интересно, а какое число тогда представлено так 255#255#255#255 ?
 
блин, ступил. правильно! извиняюсь. memcpy работаетsmile! 

 


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
mes
Дата 27.5.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



вот написал специально для Вас пример, показывающий каждое число инт в его байтовом представлении :

Код

union int2bytes
{
        int value;
        unsigned char bytes[sizeof(int)];
};

int main(void)
{

   for (int i=1; i; ++i) // тут задать необходимый интервал, сейчас от 1 и до нуля (не включительно) т.е для всех вариантов включая отрицательные.
   {
      int2bytes u;
      u.value =i;

      std::cout << u.value << " is ";

      for (int j=sizeof(int); j--;)
        std::cout << "#"<<(int)(u.bytes[j]);

      std::cout << std::endl;

    if (!(i%50))     system ("pause"); // для порционости
   }

    system ("pause");
    return 0;
}



--------------------
PM MAIL WWW   Вверх
Graf_h
Дата 27.5.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



azesmcar, 
Цитата(azesmcar @  27.5.2009,  19:12 Найти цитируемый пост)
я так понимаю о проблемах big-endian, little-endian пока думать рано?
 а что можете посоветовать. ведь не нга всех машинах числа представелнны одинаково. с этим уже сталкивался когда писал клиент на АС3, там числа представлени слева на право, а на сервере с права на лево, вот и приходилось переворачивать байты

Добавлено @ 19:27
mes, спасибо, уже в который раз выручаете, уже работаетsmile (memcpy)! это я что то тупилsmile 257  это и есть 0 0 1 1(..100000001)smile

Это сообщение отредактировал(а) Graf_h - 27.5.2009, 19:29


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
azesmcar
Дата 27.5.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Graf_h @  27.5.2009,  19:26 Найти цитируемый пост)
вот и приходилось переворачивать байты


Цитата(Graf_h @  27.5.2009,  19:26 Найти цитируемый пост)
а что можете посоветовать

переворачивать байты
например договорится (условно smile ) с сервером что сервер всегда принимает к примеру в big-endian.
PM   Вверх
Graf_h
Дата 27.5.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



Цитата(azesmcar @  27.5.2009,  19:30 Найти цитируемый пост)
например договорится (условно  ) с сервером что сервер всегда принимает к примеру в big-endian.

а что будет если перенести сервер на другую машину?? не факт что представления чисел будут одинаковыми:(


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
azesmcar
Дата 27.5.2009, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Graf_h @  27.5.2009,  19:32 Найти цитируемый пост)
а что будет если перенести сервер на другую машину?? не факт что представления чисел будут одинаковыми:( 

не важно, сервер всегда принимает в little-endian. Если ему нужно - пусть сам переворачивает.
псевдокод
Код

int v = receive();
if (i_am_little_endian())
{
   use_integer(v);
} else
{
   v = to_big_endian(v);
   use_integer(v);
}

PM   Вверх
mes
Дата 27.5.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Graf_h @  27.5.2009,  18:32 Найти цитируемый пост)
а что будет если перенести сервер на другую машину?? не факт что представления чисел будут одинаковыми:( 

Ну так договор то в силе. Сервер знает какое представление по договору и какое реальное - пусть и воспринимает (конвертирует) правильно. 


--------------------
PM MAIL WWW   Вверх
Graf_h
Дата 27.5.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



Цитата(azesmcar @  27.5.2009,  19:35 Найти цитируемый пост)
не важно, сервер всегда принимает в little-endian. Если ему нужно - пусть сам переворачивает.

а как узнать как в машине представленны числа??


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
azesmcar
Дата 27.5.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Graf_h

Я же ссылку на вики прислал. Вы бы посмотрели.
особенно раздел Проблемы совместимости
цитирую код
Код

#include <stdio.h>
unsigned short x = 1; /* 0x0001 */
int main(void)
{
  printf("%s\n", *((unsigned char *) &x) == 0 ? "big-endian" : "little-endian");
  return 0;
}



Это сообщение отредактировал(а) azesmcar - 27.5.2009, 19:40
PM   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.