Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
РП   (2010-05-20 16:37) [0]

Допустим:

байты: 145 193 041 равны числу 19410
type
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 равны числу 19410
type
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.206 c
8-1204640132
Ламер
2008-03-04 17:15
2010.08.27
Bass player


2-1272565792
Bee
2010-04-29 22:29
2010.08.27
single and string


15-1266711780
KilkennyCat
2010-02-21 03:23
2010.08.27
586b наглядно


15-1265990116
awex
2010-02-12 18:55
2010.08.27
Привет Beeline, или новый развод....


2-1267340699
Officeman
2010-02-28 10:04
2010.08.27
как задать текст для имени Tclass edit1





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский