Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизБайты в число и число в байты нужной размерности Найти похожие ветки
← →
РП (2010-05-20 16:37) [0]Допустим:
байты: 145 193 041 равны числу 19410type
TMyInteger = array[0..3] of byte;
...
var
MyInteger:TMyInteger;
N:Integer;
...
Pointer(MyInteger):=Pointer(N);
Как можно таким образом преобразовать 10 байт в число, допустим записать его в строку. И обратно из этого числа в 10 байт.
← →
Медвежонок Пятачок © (2010-05-20 16:39) [1]десятибайтовых чисел в д не бывает
← →
turbouser © (2010-05-20 16:41) [2]
> Медвежонок Пятачок © (20.05.10 16:39) [1]
Extended = 12 байт. ;) Но автору это не подойдет.
Длинная арифметика, как всегда.
← →
RWolf © (2010-05-20 16:42) [3]
> байты: 145 193 041 равны числу 19410
это в какой кодировке?
← →
Медвежонок Пятачок © (2010-05-20 16:42) [4]А у меня экстендед как раз 10 байт :)
← →
Пылкий (2010-05-20 16:44) [5]ну допустим 8 байт. раве нельзя как-то это уладить?
← →
turbouser © (2010-05-20 16:47) [6]
> Медвежонок Пятачок © (20.05.10 16:42) [4]
А, точно :)
← →
Медвежонок Пятачок © (2010-05-20 16:47) [7]int64, pint64
← →
turbouser © (2010-05-20 16:48) [8]
> Пылкий (20.05.10 16:44) [5]
Int64, UInt64 ?
← →
turbouser © (2010-05-20 16:48) [9]:)
← →
RWolf © (2010-05-20 16:53) [10]
> РП (20.05.10 16:37)
напиши процедуры для арифметических действий с 10-байтовыми числами. Число переводи в десятичное строковое представление взятием остатка от деления на 10 в цикле.
← →
РП (2010-05-20 17:02) [11]RWolf
в этом и загвостка, что я получу от остатка.. перевернет число
346/10 =6
34/10 = 4
3/10 = 3
или я не так понял?
← →
RWolf © (2010-05-20 17:05) [12]
> РП (20.05.10 17:02) [11]
расположить в строке символы в обратном порядке совсем несложно.
← →
РП (2010-05-20 17:09) [13]RWolf, не в этом дело..
если взять
байты: 145 193 041 равны числу 19410type
TMyInteger = array[0..3] of byte;
...
var
MyInteger:TMyInteger;
N:Integer;
...
Pointer(MyInteger):=Pointer(N);
← →
Медвежонок Пятачок © (2010-05-20 17:10) [14]байты: 145 193 041 равны числу 19410
они там тоже перевернутые
← →
РП (2010-05-20 17:14) [15]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:17) [16]но как больше array[0..3] это не катит.
C интегером не катит. Зато катит с int64 [0..7]
← →
RWolf © (2010-05-20 17:19) [17]> [15]
и не должно. Delphi умеет арифметику максимум 64-разрядных целых чисел. Если надо больше — надо писать свои процедуры для арифметических действий
← →
Плохиш © (2010-05-20 17:20) [18]
> MyInteger:TMyInteger;
> N:Integer;
>
> Pointer(N):= Pointer(MyInteger);
>
=
N: Integer Absolute MyInteger;
← →
Омлет © (2010-05-20 17:26) [19]Нужна строковая арифметика.
← →
РП (2010-05-20 17:28) [20]Все понял. Может кто встречал такие функции?
← →
RWolf © (2010-05-20 17:37) [21]
> РП (20.05.10 17:28) [20]
http://www.submanifold.be/triade/GInt/gint.html
← →
РП (2010-05-20 18:46) [22]Про это знаю. А конкретно как сделать перевод..
← →
Anatoly Podgoretsky © (2010-05-20 19:00) [23]Допустим 145 193 041 это все таки 9 байт
Допустим, что массив array[0..3] в состоянии хранить только четыре байта.
Сообственно больше и допускать не надо.
← →
РП (2010-05-20 19:22) [24]Anatoly Podgoretsky
> Допустим 145 193 041 это все таки 9 байт
145
193
041
Это байты, 3 байта в chr для удобства.
← →
Игорь Шевченко © (2010-05-20 23:13) [25]то есть, ты еще и вопросы задавать не умеешь
← →
Anatoly Podgoretsky © (2010-05-21 07:46) [26]> РП (20.05.2010 19:22:24) [24]
Это хуже, теперь три байта, но зато теперь в массив помещается.
← →
Amoeba_ (2010-05-21 18:13) [27]
> Игорь Шевченко © (20.05.10 23:13) [25]
+1
← →
РП (2010-05-22 02:36) [28]а как? как массив из 6-ти байт запихать в число и конвертировать обратно?
← →
Германн © (2010-05-22 02:51) [29]
> РП (22.05.10 02:36) [28]
>
> а как? как массив из 6-ти байт запихать в число и конвертировать
> обратно?
>
Да как угодно!
Может наконец опишешь свою задачу?
А то сначала было 3 или 4 байта. Теперь ни с того ни с сего стало 6!
← →
0x00FF00 (2010-05-22 03:08) [30]Мне одному пришли на ум 128-разрядные (сиречь, 16-байтные) регистры SSE? %)
← →
Германн © (2010-05-22 03:20) [31]
> 0x00FF00 (22.05.10 03:08) [30]
>
> Мне одному пришли на ум 128-разрядные (сиречь, 16-байтные)
> регистры SSE? %)
>
Ты слишком умный. :)
← →
РП (2010-05-22 03:29) [32]Германн
Задача. Есть 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х байт.
← →
Sha © (2010-05-22 07:13) [33]>> Может наконец опишешь свою задачу?
> Нужно этот массив сконвертировать в число и обратно в 6 байт из числа.
Просто ничего не делай.
В твоих 6-ти байтах уже сидит нужный тебе результат.
← →
Sha © (2010-05-22 07:52) [34]
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;
← →
Anatoly Podgoretsky © (2010-05-22 09:01) [35]
> Этот код делает нечто подобное, но только для 3х байт.
Так брать 8 байт неоткуда, максимум 4 байта.
← →
РП (2010-05-22 14:46) [36]Sha число не в 10-тичной системе. вобще код то что надо?
← →
Sha © (2010-05-22 14:48) [37]Не надо - не бери :)
← →
РП (2010-05-22 14:50) [38]Как просто, массив
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
← →
РП (2010-05-22 14:52) [39]Sha твой код выводит
M[0]:=$10;
M[1]:=$32;
M[2]:=$54;
M[3]:=$76;
M[4]:=$98;
M[5]:=$ba;
и этоже в обратном порядке. Это вобще к чему.
← →
Sha © (2010-05-22 15:00) [40]> РП (22.05.10 14:50) [38]
Что такое по-твоему "10тичное число"?
Что значит "сконвертить по принципу"?
Принцип словами сформулируй, чтобы не гадать, что ты имел в виду.
> "Этот код делает нечто подобное".
В угадайку играем? Точно скажи, что надо.
> "реузльтат: 2736529"
Как посчитал?
> твой код выводит
> и этоже в обратном порядке. Это вобще к чему.
А разобраться пробовал?
Каждая строчка в отдельности понятна?
Про целочисленные типы данных в хелпе читал?
Как они располагаются в памяти препод говорил?
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.069 c