Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IEEE-754 Floating-Point Conversion 
:(
    Опции темы
Xao
Дата 9.2.2008, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем привет, подскажите как перевести число с плавающей точкой (float)  в hex
Я пробовал через VB, но он переводит также как обычный калькулятор, а там точка отбрасывается

вот кое-что есть по этому поводу, но я че-то не понял smile

Код

    Floats are using the standard IEEE 32bit float format. They are stored using 4 bytes and the "Little Endian" order.
    They are just like the C++ "float" type.
    Size: 4 bytes
    Example: 7654.32 decimal, this number can't be stored using this format so the system will take the closest value that can be represented using binary digits. The closest one is: 7654.319824 decimal = [45 EF 32 8F]h and will be stored as [8F 32 EF 45]h


а вот тут есть этот калькулятор:
http://babbage.cs.qc.edu/IEEE-754/Decimal.html

или вот нашел еще код на С++
Код

float x=0.05;
*(DWORD*)&x == 0x3D4CCCCD


или

Код

#include <stdio.h>
#include <windows.h>

int main( void )
{
float x = 0.05;
unsigned int y;
RtlCopyMemory(&y, &x, sizeof( float ));
printf("Float Value = %f Hex Value = 0x%x", x, y);
return 0;
}

>>

E:TempСИ>prog.exe
Float Value = 0.050000
Hex Value = 0x3d4ccccd
E:TempСИ>


Читал еще что как-то через binary еще можно делать

Это сообщение отредактировал(а) Xao - 9.2.2008, 18:30
PM MAIL   Вверх
Void
Дата 9.2.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



BitConverter.GetBytes, полученный массив уже выводить.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Xao
Дата 10.2.2008, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Void, 
вот из 0.05 у меня получилось:
Код

test    {byte[8]}    byte[]
    [0]    154    byte
    [1]    153    byte
    [2]    153    byte
    [3]    153    byte
    [4]    153    byte
    [5]    153    byte
    [6]    169    byte
    [7]    63    byte


должно получится что-то вроде:
3d4ccccd - 4 байта, а не 8


не понял как из того, что получилось, получить 3d4ccccd?

Это сообщение отредактировал(а) Xao - 10.2.2008, 00:47
PM MAIL   Вверх
Void
Дата 10.2.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Xao, код в студию, должно быть 4 байта (cdcc4c3d).


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Xao
Дата 10.2.2008, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Void, 
какой код?

Код

byte[] test = BitConverter.GetBytes(0.005);

вот из этого и получилось 

Код

test    {byte[8]}    byte[]
    [0]    154    byte
    [1]    153    byte
    [2]    153    byte
    [3]    153    byte
    [4]    153    byte
    [5]    153    byte
    [6]    169    byte
    [7]    63    byte


у тебя получилось?
PM MAIL   Вверх
Void
Дата 10.2.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Действительные константы по умолчанию имеют тип double (тоже IEEE-754 формат, впрочем). Чтобы был float, нужно приписывать суффикс f: 0.005f.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Xao
Дата 10.2.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Void, 
спасибо!
все получилось smile

а не подскажешь как обратно переконвертировать, т.е. есть строка:
Код

string s = "CD-CC-4C-3D";

вот из нее надо сделать число 0,05

можно получить каждый байт, но он представлен как строка, т.е.

"CD"
"CC"
"4C"
"3D"

а надо типа

0xCD
0xCC
0x4C
0x3D


Это сообщение отредактировал(а) Xao - 10.2.2008, 15:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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