2013-03-27 5 views
0

Я разрабатываю приложение в приложении Visual C++ 2010 Win Forms, я получаю шестнадцатеричные данные (пакеты) и сохраняю их в Rich Text Box , Полученные шестнадцатеричные данные будут представлять собой числа с плавающей запятой. Для Ex: плавающее число 11.62 будет получено как 4139eb85 (это строка, хранящаяся в RichTextBox). Я хотел преобразовать шестнадцатеричное число в его исходное значение и отобразить его. Я изо всех сил пытаюсь преобразовать (для ex) 4139EB85 в его исходное значение 11.62Как преобразовать шестнадцатеричное число (число с плавающей запятой) в десятичное число в Visual C++ 2010

Pl любой поможет мне в кратчайшие сроки.

+0

Получаете ли вы строку из 8 шестнадцатеричных символов , или поток из четырех байтов? – Eric

+0

Я получаю только поток из 4 байтов. Но он хранится в текстовом поле как строка. – Deepak

+0

У меня есть еще одна путаница, как шестнадцатеричный, представляющий целое число со знаком, может быть преобразован в целое число под знаком. Для примера. FFF4 представляет -12. Как преобразовать FFF4 в свой оригинальный знак Value. – Deepak

ответ

1

Вы можете разобрать строку как UInt32, а затем использовать BitConverter::ToSingle для преобразования байтов в поплавка:

// Convert the hex string into a UInt32 (if necessary) 
UInt32 bits = UInt32::Parse("4139EB85", System::Globalization::NumberStyles::HexNumber); 
// Convert the bytes of the UInt32 to a Single/float 
float f = BitConverter::ToSingle(BitConverter::GetBytes(bits), 0); 
+1

Дорогой сэр, получилось как ожидалось. Большое спасибо. – Deepak

+0

У меня есть еще одна путаница, как шестнадцатеричный, представляющий целое число со знаком, может быть преобразован в целое число под знаком. Для примера. FFF4 представляет -12. Как преобразовать FFF4 в свой оригинальный знак Value. Пл помоги мне с этим. – Deepak

+1

@Deepak Это тот же принцип, только с другим типом: 'Int32 :: Parse (« FFFFFFF4 », System :: Globalization :: NumberStyles :: HexNumber);' «FFF4» - это всего два байта, так что вы либо нужно разбирать как 'Int16', либо расширять байты байтами (как и я, если первый бит установлен, pad оставлен с 1s) перед синтаксическим разбором. Если вы всегда получаете только два байта, я бы предложил вам просто проанализировать его как 'Int16'. – Botz3000

2

не портативный, но:

int x = 0x4139eb85; 
float y = *reinterpret_cast<float *>(&x); 
Смежные вопросы

 Смежные вопросы