Форум: "Начинающим";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
ВнизПеревод шестнадцатиричных чисел в десятичные Найти похожие ветки
← →
Алик (2006-12-11 11:25) [0]Всем привет!
Народ подскажите как перевести два байта (старший и младший байт) в одно десятичное число !
Думаю, что есть какой-нибудь простой вариант, пока же я перевожу оба байта в двоичное представление, сшиваю их и затем из одного двоичного числа получаю десятичное, получается типа как почесать правое ухо левой рукой. )
← →
Elen © (2006-12-11 11:29) [1]Удалено модератором
← →
Сергей М. © (2006-12-11 11:54) [2]"десятичное_число" := старший_байт shl 8 + младший_байт
← →
Kolan © (2006-12-11 11:58) [3]> [2] Сергей М. © (11.12.06 11:54)
> "десятичное_число" := старший_байт shl 8 + младший_байт
А я всегда пользую дерективу abstractfunction ConvertBytesToWord(HighByte, LowByte: Byte): Word;
var
Temp: Word;
TempArr: array[0..1] of Byte absolute Temp;
begin
TempArr[1] := HighByte;
TempArr[0] := LowByte;
Result := Temp;
end;
← →
Kolan © (2006-12-11 11:59) [4]> дерективу abstract
Извеняюсь, absolute конечно.
← →
Anatoly Podgoretsky © (2006-12-11 12:28) [5]> Алик (11.12.2006 11:25:00) [0]
Вопрос совсем непонятный, попробуй объяснить с исходными данным и нужным результатом, а то можно настроить множество теорий, что ты хочешь сделать
← →
Алик (2006-12-11 19:29) [6]> Anatoly Podgoretsky © (11.12.06 12:28) [5]
> Вопрос совсем непонятный, попробуй объяснить с исходными данным и нужным результатом, а то можно настроить множество теорий, что ты хочешь сделать
Благодарю Всех за помощь!
Со специализированной аппаратуры я получаю два байта (Б1 и Б2) - старший и младший байты угла азимута (0 < Az < 360).
Необходимо получить одно десятичное число или угол азимут.
Если перевести Б1 и Б2 в 16-ную систему, то Az = $Б1$Б2
Но как это сделать в коде?
Сейчас проверю варианты предложенные Сергеем и Kolan.
← →
Anatoly Podgoretsky © (2006-12-11 19:51) [7]> Алик (11.12.2006 19:29:06) [6]
То есть у тебя байты поменяны местами, в стандарте OS 360?
← →
Алик (2006-12-11 21:09) [8]Anatoly Podgoretsky
>То есть у тебя байты поменяны местами, в стандарте OS 360?
Все оказалось очень просто! Работают варианты и Сергея и Kolan!
Az = B1 shl 8 + B2
Так например если B1=1, B=89, то Az = 345 (десятичная система)
Или в 16-ной системе B1=1, B=59, то Az=159 (шестнадцатиричная система)
← →
vrem (2006-12-11 21:37) [9]ха, Алик, ты в курсе что загадочное "shl 8"
значит умножить на 256?
т.е. твой вопрос если применить к десятичным
числам, то получится -
имею 4 десятка и 5 единиц, как сшить в одно число,
(т.е. в 45)? :)
короче почитай что за такие системы исчисления,
кстати твоя - 256-ричные числа, не 16 ричные
← →
Anatoly Podgoretsky © (2006-12-11 21:42) [10]> Алик (11.12.2006 21:09:08) [8]
1.
WordRec(Az).Hi := B1
WordRec(Az).Low := B2
2.
Swap(Az)
← →
AndreyRu (2006-12-12 00:31) [11]function HexToInt(Hex : String) : integer;
begin
Result := StrToInt("$"+Hex);
end;
← →
Германн © (2006-12-12 01:04) [12]
> AndreyRu (12.12.06 00:31) [11]
Немного не туда, имхо.
> Anatoly Podgoretsky © (11.12.06 19:51) [7]
>
> > Алик (11.12.2006 19:29:06) [6]
>
> То есть у тебя байты поменяны местами, в стандарте OS 360?
>
Все мои железки передают байты от младших к старшим. И я очень не люблю тех, котороым это не нравится.
← →
Anatoly Podgoretsky © (2006-12-12 01:06) [13]> Германн (12.12.2006 1:04:12) [12]
Речь не о передаче, а о порядке байт Little vs Big Endian
← →
Германн © (2006-12-12 01:16) [14]
> Anatoly Podgoretsky © (12.12.06 01:06) [13]
>
> > Германн (12.12.2006 1:04:12) [12]
>
> Речь не о передаче, а о порядке байт Little vs Big Endian
Я то именно о передаче. Если железка передаёт байты начиная с младшего, то очень удобно пользоваться рекордами.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c