Тема: TBcd
Показать сообщение отдельно
  #5  
Старый 24.01.2014, 18:52
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
По умолчанию ведь с пробелом выводится?
Фиг его знает. Не выводил.
Цитата:
Число 16 в 16-ричной системе счисленния будет как $10. В Precision записано 2, значит число состоит из двух цифр. В SignSpecialPlaces записано 1, значит одна из этих цифр используется для десятичной дроби. Получается, что число 1 было записано как "1,0".
Да уж, гениальная запись инта. Особенно напрягает, что в доке-то написано: SignSpecialPlaces: The sign bit (0 is positive, any other value negative). И ни слова про дроби.
Цитата:
Формата жопошнее чем BCD не видел в жизни.
Он удобен в одном применении - вывод. RTC-часики типа DS1307 в нем считают и отдают время. Учитывая, что работа с ними идет с МК, где деления нет и в помине, BCD очень удобно выводить на экран и вообще переводить в строку - не надо делить на 10. Тупо разбил маской на 2 части и прибавил 0x30 (хотя поскольку у меня в девайсе только цифры, даже прибавлять не надо, в моей кодировке всего 11 символов). Ну а у меня запись времени в часики идет с компа.
В итоге забил на этот глюкомодуль и сделал проще:
Код:
function toBCD(val:byte): byte;
begin
  if val > 99 then
     result := 0;
  else
     result := ((val div 10) shl 4) + (val mod 10);
end;
Поскольку мне достаточно кодировать 1 байт.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием