Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Байты в число и число в байты нужной размерности


Страницы:   1 2 3

РП ©   (2010-05-20 16:37:00) 

Допустим:

байты: 145 193 041равны числу 19410
type
TMyInteger = array[0..3] of byte;
...
var
MyInteger:TMyInteger;
N:Integer;
...
Pointer(MyInteger):=Pointer(N);


Как можно таким образом преобразовать  10 байт в число, допустим записать его в строку. И обратно из этого числа в 10 байт.


Sha   (2010-05-22 16:32:00) [1]

см [34]


РП   (2010-05-22 16:12:00) [2]

да как больше


Sha   (2010-05-22 15:57:00) [3]

> тут максимум 3 байта можно конвертить.

4


РП   (2010-05-22 15:12:00) [4]

это да, вот вернее.

procedure TForm1.Button2Click(Sender: TObject);
var
MyInteger:TMyInteger;
N:integer;
begin
MyInteger[0] := 145;
MyInteger[1] := 193;
MyInteger[2] := 041;
MyInteger[3] := 031;

Pointer(N):= Pointer(MyInteger);
memo1.Lines.add(inttostr(N));
end;

procedure TForm1.Button3Click(Sender: TObject);
var
MyInteger:TMyInteger;
N,h:integer;
begin
Pointer(MyInteger):=Pointer(522830225);
for h:=0 to 3 do
memo1.Lines.Add(inttostr(MyInteger[h]));
end;


все же у меня в этом вопрос. тут максимум 3 байта можно конвертить.


Sha   (2010-05-22 15:11:00) [5]

Ты понимаешь, что твой код работает с "лишним" байтом?


РП   (2010-05-22 15:03:00) [6]

Вот код, берем 3 байта, переделываем в число 2736529 и второй батон конвертируем обратно в 3 байта. Но как для 6-ти сделать тожсамое.
procedure TForm1.Button2Click(Sender: TObject);
var
MyInteger:TMyInteger;
N:Integer;
begin
MyInteger[0] := 145;
MyInteger[1] := 193;
MyInteger[2] := 041;

Pointer(N):= Pointer(MyInteger);
memo1.Lines.add(inttostr(N));
end;

procedure TForm1.Button3Click(Sender: TObject);
var
MyInteger:TMyInteger;
N,h:Integer;
begin
Pointer(MyInteger):=Pointer(2736529);
for h:=0 to 2 do
memo1.Lines.Add(inttostr(MyInteger[h]));
end;


Sha   (2010-05-22 15:00:00) [7]

> РП   (22.05.10 14:50) [38]


Что такое по-твоему "10тичное число"?


Что значит "сконвертить по принципу"?
Принцип словами сформулируй, чтобы не гадать, что ты имел в виду.


> "Этот код делает нечто подобное".
В угадайку играем? Точно скажи, что надо.


> "реузльтат: 2736529"
Как посчитал?


> твой код выводит
> и этоже в обратном порядке. Это вобще к чему.

А разобраться пробовал?
Каждая строчка в отдельности понятна?
Про целочисленные типы данных в хелпе читал?
Как они располагаются в памяти препод говорил?


РП   (2010-05-22 14:52:00) [8]

Shaтвой код выводит

M[0]:=$10;
M[1]:=$32;
M[2]:=$54;
M[3]:=$76;
M[4]:=$98;
M[5]:=$ba;

и этоже в обратном порядке. Это вобще к чему.


РП   (2010-05-22 14:50:00) [9]

Как просто, массив
M[0]:=$10;
M[1]:=$32;
M[2]:=$54;
M[3]:=$76;
M[4]:=$98;
M[5]:=$ba;

сконвертить в 10тичное число по принципу

type
TMyInteger = array[0..3] of byte;
...
var
MyInteger:TMyInteger;
N:Integer;
...
Pointer(MyInteger):=Pointer(N);

var
MyInteger:TMyInteger;
N:Integer;
begin
MyInteger[0] := 145;
MyInteger[1] := 193;
MyInteger[2] := 041;

Pointer(N):= Pointer(MyInteger);

Этот код делает нечто подобное, но только для 3х байт

var
MyInteger:TMyInteger;
N:Integer;
begin
MyInteger[0] := 145;
MyInteger[1] := 193;
MyInteger[2] := 041;

Pointer(N):= Pointer(MyInteger);


реузльтат: 2736529


Sha   (2010-05-22 14:48:00) [10]

Не надо - не бери :)


РП   (2010-05-22 14:46:00) [11]

Shaчисло не в 10-тичной системе. вобще код то что надо?


Anatoly Podgoretsky   (2010-05-22 09:01:00) [12]


> Этот код делает нечто подобное, но только для 3х байт.

Так брать 8 байт неоткуда, максимум 4 байта.


Sha   (2010-05-22 07:52:00) [13]


procedure TForm1.Button1Click(Sender: TObject);
type
 TMy6Bytes= array[0..5] of byte;
 TMyRec= packed record
   a6: TMy6Bytes;
   a2: word;
   end;
 PMyRec= ^TMyRec;
var
 M: TMy6Bytes;
 N: int64;
begin;
 M[0]:=$10;
 M[1]:=$32;
 M[2]:=$54;
 M[3]:=$76;
 M[4]:=$98;
 M[5]:=$ba;
 N:=$fedc000000000000;

 //Туда
 PMyRec(@N).a6:=M;
 Memo1.Lines.Add(IntToHex(N,16));

 FillChar(M,SizeOf(M),0);

 //Сюда
 M:=PMyRec(@N).a6;
 Memo1.Lines.Add(Format('%x %x %x %x %x %x',
   [M[0], M[1], M[2], M[3], M[4], M[5]]));
 end;


Sha   (2010-05-22 07:13:00) [14]

>> Может наконец опишешь свою задачу?
> Нужно этот массив сконвертировать в число и обратно в 6 байт из числа.

Просто ничего не делай.
В твоих 6-ти байтах уже сидит нужный тебе результат.


РП   (2010-05-22 03:29:00) [15]

Германн

Задача. Есть 6 байт информации, массив. Нужно этот массив сконвертировать в число и обратно в 6 байт из числа.

type
TMyInteger = array[0..3] of byte;
...
var
MyInteger:TMyInteger;
N:Integer;
...
Pointer(MyInteger):=Pointer(N);

var
MyInteger:TMyInteger;
N:Integer;
begin
MyInteger[0] := 145;
MyInteger[1] := 193;
MyInteger[2] := 041;

Pointer(N):= Pointer(MyInteger);

Этот код делает нечто подобное, но только для 3х байт.


Германн   (2010-05-22 03:20:00) [16]


> 0x00FF00   (22.05.10 03:08) [30]
>
> Мне одному пришли на ум 128-разрядные (сиречь, 16-байтные)
> регистры SSE? %)
>

Ты слишком умный. :)


0x00FF00   (2010-05-22 03:08:00) [17]

Мне одному пришли на ум 128-разрядные (сиречь, 16-байтные) регистры SSE? %)


Германн   (2010-05-22 02:51:00) [18]


> РП   (22.05.10 02:36) [28]
>
> а как? как массив из 6-ти байт запихать в число и конвертировать
> обратно?
>

Да как угодно!
Может наконец опишешь свою задачу?
А то сначала было 3 или 4 байта. Теперь ни с того ни с сего стало 6!


РП   (2010-05-22 02:36:00) [19]

а как? как массив из 6-ти байт запихать в число и конвертировать обратно?


Amoeba_   (2010-05-21 18:13:00) [20]


> Игорь Шевченко ©   (20.05.10 23:13) [25]

+1


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо