Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > как перенести 3 байта в переменую


Автор: andrewr 2.11.2007, 22:15
есть
Код

var
 buf:array [1..3] of byte;
 x:dword;
begin
 buf[1]:=33;
 buf[2]:=22;
 buf[3]:=11;



надо вытащить значения с buf[1..3] в обратном порядке и поместить в х. тоесть на исходе:
x:=112233;

Спасиба!

Автор: andrewr 2.11.2007, 22:43
Код

function reverse_array(buf:array of byte; len:integer):integer;
var
  i:integer;
  s:string;
begin
  for i:=len-1 downto 0 do
    s:=s+inttohex(buf[i],2);
  result:=strtoint(s);
end;


тупое решение но всеже работает, если есть лутче напишите пожалуста.

Автор: ivan219 3.11.2007, 10:15
http://forum.vingrad.ru/forum/topic-175068.html

Автор: skyboy 3.11.2007, 10:43
andrewr, в каждом байте хранится число до 255. значит, если мы размещаем в памяти три байта(со значениями 11, 22 и 33) последовательно, то имеем не 112233(так в десятиричной системе счисления), а (11*256+22)*256+33=726561. точно также, как если в word разместить подряд два байта значением в 255, то получится FFFFh, что равно 65535, а не 255255.
значит твою логику по "склеиванию" чисел можно сделать только через объединение строк. преобразуешь каждое число в строку и соединяешь их вместе.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)