![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Байты в число и число в байты нужной размерности
РП © (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 байт.
Anatoly Podgoretsky (2010-05-21 07:46:00) [21]> РП (20.05.2010 19:22:24) [24]
Это хуже, теперь три байта, но зато теперь в массив помещается.
Игорь Шевченко (2010-05-20 23:13:00) [22]то есть, ты еще и вопросы задавать не умеешь
РП (2010-05-20 19:22:00) [23]Anatoly Podgoretsky
> Допустим 145 193 041 это все таки 9 байт
145
193
041
Это байты, 3 байта в chr для удобства.
Anatoly Podgoretsky (2010-05-20 19:00:00) [24]Допустим 145 193 041 это все таки 9 байт
Допустим, что массив array[0..3] в состоянии хранить только четыре байта.
Сообственно больше и допускать не надо.
РП (2010-05-20 18:46:00) [25]Про это знаю. А конкретно как сделать перевод..
RWolf (2010-05-20 17:37:00) [26]
> РП (20.05.10 17:28) [20]
http://www.submanifold.be/triade/GInt/gint.html
РП (2010-05-20 17:28:00) [27]Все понял. Может кто встречал такие функции?
Омлет (2010-05-20 17:26:00) [28]Нужна строковая арифметика.
Плохиш (2010-05-20 17:20:00) [29]
> MyInteger:TMyInteger;
> N:Integer;
>
> Pointer(N):= Pointer(MyInteger);
>
=
N: Integer Absolute MyInteger;
RWolf (2010-05-20 17:19:00) [30]> [15]
и не должно. Delphi умеет арифметику максимум 64-разрядных целых чисел. Если надо больше — надо писать свои процедуры для арифметических действий
Медвежонок Пятачок (2010-05-20 17:17:00) [31]но как больше array[0..3] это не катит.
C интегером не катит. Зато катит с int64 [0..7]
РП (2010-05-20 17:14:00) [32]type
TMyInteger = array[0..3] of byte;
var
MyInteger:TMyInteger;
N:Integer;
begin
MyInteger[0] := 145;
MyInteger[1] := 193;
MyInteger[2] := 041;
Pointer(N):= Pointer(MyInteger);
реузльтат: 2736529
но как больше array[0..3] это не катит.
Медвежонок Пятачок (2010-05-20 17:10:00) [33]байты: 145 193 041 равны числу 19410
они там тоже перевернутые
РП (2010-05-20 17:09:00) [34]RWolf, не в этом дело..
если взять
байты: 145 193 041 равны числу 19410
type
TMyInteger = array[0..3] of byte;
...
var
MyInteger:TMyInteger;
N:Integer;
...
Pointer(MyInteger):=Pointer(N);
RWolf (2010-05-20 17:05:00) [35]
> РП (20.05.10 17:02) [11]
расположить в строке символы в обратном порядке совсем несложно.
РП (2010-05-20 17:02:00) [36]RWolf
в этом и загвостка, что я получу от остатка.. перевернет число
346/10 =6
34/10 = 4
3/10 = 3
или я не так понял?
RWolf (2010-05-20 16:53:00) [37]
> РП (20.05.10 16:37)
напиши процедуры для арифметических действий с 10-байтовыми числами. Число переводи в десятичное строковое представление взятием остатка от деления на 10 в цикле.
turbouser (2010-05-20 16:48:00) [38]:)
turbouser (2010-05-20 16:48:00) [39]
> Пылкий (20.05.10 16:44) [5]
Int64, UInt64 ?
Медвежонок Пятачок (2010-05-20 16:47:00) [40]int64, pint64