EasyDelphi Q&A
+4 تصويتات
36 مشاهدات
كيف اعرف نمط صحيح جديد للدلفي بدقه 128 بت

يفضل ان يكون مبسط بالعمليات الاساسيه فقط و باستخدام Record مع class operator
سُئل في تصنيف vcl بواسطة (810 نقاط) | 36 مشاهدات

1 إجابة واحدة

+3 تصويتات

أولا أشكرك كثيرا على هذا السؤال الرائع ...

ثانيا : بعد البحث في الأنترنات فقد تحصلت على الأجابة التي تريد ... 

ــأولا الحل ـالأول : الرابط من هنا.

إنها مكتبة جد رائعة من الشركة : fundamentals. ولكن من دون class operator.

تعريف :

Fundamentals 5 Library
Fundamentals 5 Code Library for FreePascal and Delphi

Includes:

String, DateTime and dynamic array routines
Unicode routines
Hash (e.g. SHA256, SHA512, SHA1, SHA256, MD5)
Integer (e.g. Word128, Word256, Int128, Int256)
Huge Word, Huge Integer
Decimal (Decimal32, Decimal64, Decimal128, HugeDecimal and signed decimals)
Random number generators
Ciphers (symmetric: AES, DES, RC2, RC4; asymmetric: RSA, Diffie-Hellman)
Data structures (array and dictionary classes)
Mathematics (Rational number, complex number, vector, matrix, statistics)
JSON parser
Google protocol buffer parser, utilities and Pascal code generator
Socket library (cross platform - Windows and Linux)
TLS Client
TLS Server
TCP Client
TCP Server
HTTP Client
HTTP Server

مثال الوحدة flcInteger.pas : 

unit flcInteger;

interface

uses
  { Fundamentals }
  flcStdTypes;



{                                                                              }
{ Word structures                                                              }
{                                                                              }
type
  Word32Pair = packed record
    case Integer of
    0 : (A, B    : Word32);
    1 : (Bytes   : array[0..7] of Byte);
    2 : (Words   : array[0..3] of Word);
    3 : (Word32s : array[0..1] of Word32);
  end;
  PWord32Pair = ^Word32Pair;

  Word64 = packed record
    case Integer of
    0 : (Bytes   : array[0..7] of Byte);
    1 : (Words   : array[0..3] of Word);
    2 : (Word32s : array[0..1] of Word32);
  end;
  PWord64 = ^Word64;

  Word128 = packed record
    case Integer of
    0 : (Bytes   : array[0..15] of Byte);
    1 : (Words   : array[0..7] of Word);
    2 : (Word32s : array[0..3] of Word32);
    3 : (Word64s : array[0..1] of Word64);
  end;
  PWord128 = ^Word128;

  Word256 = packed record
    case Integer of
    0 : (Bytes    : array[0..31] of Byte);
    1 : (Words    : array[0..15] of Word);
    2 : (Word32s  : array[0..7] of Word32);
    3 : (Word64s  : array[0..3] of Word64);
    4 : (Word128s : array[0..1] of Word128);
  end;
  PWord256 = ^Word256;

  Word512 = packed record
    case Integer of
    0 : (Bytes    : array[0..63] of Byte);
    1 : (Words    : array[0..31] of Word);
    2 : (Word32s  : array[0..15] of Word32);
    3 : (Word64s  : array[0..7] of Word64);
    4 : (Word128s : array[0..3] of Word128);
    5 : (Word256s : array[0..1] of Word256);
  end;
  PWord512 = ^Word512;

  Word1024 = packed record
    case Integer of
    0 : (Bytes    : array[0..127] of Byte);
    1 : (Words    : array[0..63] of Word);
    2 : (Word32s  : array[0..31] of Word32);
    3 : (Word64s  : array[0..15] of Word64);
    4 : (Word128s : array[0..7] of Word128);
    5 : (Word256s : array[0..3] of Word256);
    6 : (Word512s : array[0..1] of Word512);
  end;
  PWord1024 = ^Word1024;

  Word2048 = packed record
    case Integer of
    0 : (Bytes     : array[0..255] of Byte);
    1 : (Words     : array[0..127] of Word);
    2 : (Word32s   : array[0..63] of Word32);
    3 : (Word64s   : array[0..31] of Word64);
    4 : (Word128s  : array[0..15] of Word128);
    5 : (Word256s  : array[0..7] of Word256);
    6 : (Word512s  : array[0..3] of Word512);
    7 : (Word1024s : array[0..1] of Word1024);
  end;
  PWord2048 = ^Word2048;

  Word4096 = packed record
    case Integer of
    0 : (Bytes     : array[0..511] of Byte);
    1 : (Words     : array[0..255] of Word);
    2 : (Word32s   : array[0..127] of Word32);
    3 : (Word64s   : array[0..63] of Word64);
    4 : (Word128s  : array[0..31] of Word128);
    5 : (Word256s  : array[0..15] of Word256);
    6 : (Word512s  : array[0..7] of Word512);
    7 : (Word1024s : array[0..3] of Word1024);
    8 : (Word2048s : array[0..1] of Word2048);
  end;
  PWord4096 = ^Word4096;

  Word8192 = packed record
    case Integer of
    0 : (Bytes     : array[0..1023] of Byte);
    1 : (Words     : array[0..511] of Word);
    2 : (Word32s   : array[0..255] of Word32);
    3 : (Word64s   : array[0..127] of Word64);
    4 : (Word128s  : array[0..63] of Word128);
    5 : (Word256s  : array[0..31] of Word256);
    6 : (Word512s  : array[0..15] of Word512);
    7 : (Word1024s : array[0..7] of Word1024);
    8 : (Word2048s : array[0..3] of Word2048);
    9 : (Word4096s : array[0..1] of Word4096);
  end;
  PWord8192 = ^Word8192;

const
  Word8Size    = SizeOf(Word8);
  Word16Size   = SizeOf(Word16);
  Word32Size   = SizeOf(Word32);
  Word64Size   = SizeOf(Word64);
  Word128Size  = SizeOf(Word128);
  Word256Size  = SizeOf(Word256);
  Word512Size  = SizeOf(Word512);
  Word1024Size = SizeOf(Word1024);
  Word2048Size = SizeOf(Word2048);
  Word4096Size = SizeOf(Word4096);
  Word8192Size = SizeOf(Word8192);

const
  MinWord8      = Low(Word8);
  MaxWord8      = High(Word8);
  MinWord16     = Low(Word16);
  MaxWord16     = High(Word16);
  MinWord32     = Word32(Low(Word32));
  MaxWord32     = Word32(High(Word32));



{                                                                              }
{ Integer structures                                                           }
{                                                                              }
type
  Int32Pair = packed record
    case Integer of
    0 : (A, B      : Int32);
    1 : (Bytes     : array[0..7] of Byte);
    2 : (Words     : array[0..3] of Word);
    3 : (Word32s   : array[0..1] of Word32);
    4 : (ShortInts : array[0..7] of ShortInt);
    5 : (SmallInts : array[0..3] of SmallInt);
    6 : (Int32s  : array[0..1] of Int32);
  end;
  PInt32Pair = ^Int32Pair;

  Int64Rec = packed record
    case Integer of
    0 : (Bytes   : array[0..7] of Byte);
    1 : (Words   : array[0..3] of Word);
    2 : (Word32s : array[0..1] of Word32);
    3 : (Int32s : array[0..1] of Int32);
  end;
  PInt64Rec = ^Int64Rec;

  Int128 = packed record
    case Integer of
    0 : (Bytes     : array[0..15] of Byte);
    1 : (Words     : array[0..7] of Word);
    2 : (Word32s : array[0..3] of Word32);
    3 : (Word64s   : array[0..1] of Word64);
    4 : (Int32s  : array[0..3] of Int32);
    5 : (Int64s    : array[0..1] of Int64);
  end;
  PInt128 = ^Int128;

 

أما التي تشترط فيها class operator فالرابط هنا.

تحميل الملف من هنا.

ملاحظة: هذة الأخيرة لا تعمل إلا مع الدالفي 64 كومبايلر .

 

تم الرد عليه بواسطة (18,190 نقاط)
عُدل بواسطة
شكرا للاجابه.  
بالنسبه للمكتبه الاخيره فهي اولا مكتبه بلغه الاله و ثانيا كما ذكرت تعمل مع دلفي 64 بت من الصعب الاعتماد عليها :(
بالنسبه لمكتبه fundamentals هل من الممكن فصل الكود الخاص بالتعامل مع Int128 بشكل مبسط و مع العمليات الاساسيه فقط ؟
أشكرك كثيرا على التوضيحات ...
 أولا : بالنسبه للمكتبه الاخيره لبس كلها بلغة الألة (رغم أن Assembly هي لغة يفهمها الأنسان) أما أنها تعمل على دلفي 64 بت فقط... فهذا لأن الكود Assembley المستعمل فيها هو موجه فقط ليعمل غلى دلفي 64 بت كومبايلر ...
ثانيا : بالنسبه لمكتبه fundamentals هل من الممكن فصل الكود الخاص بالتعامل مع Int128 بشكل مبسط و مع العمليات الاساسيه فقط ؟ هذا عمل يتطلب مني الكثير من الجهد .. لكن لا ضير في أن تقوم بمراسلة الفريق على الأيمايل الخاص بهم ... أضنني لاحظت أنهم قد وضعو الأيمايل في كل وحدة من الوحدات التي تنتمي لهم ..
E-mail:           fundamentals.library at gmail.com

في الأخير أعتذر بقوة إن لم تكن إجابتي أو حتى تعليقي هذا في المستوى الذي تريد ... و شكرا لتفهمك ...

اسئلة متعلقة

0 تصويتات
2 إجابة
+4 تصويتات
2 إجابة
سُئل أغسطس 4، 2018 في تصنيف vcl بواسطة مجهول | 67 مشاهدات
0 تصويتات
0 إجابة
سُئل يونيو 13 في تصنيف vcl بواسطة Djemoui Benkhalifa (990 نقاط) | 31 مشاهدات
0 تصويتات
1 إجابة
سُئل يونيو 12 في تصنيف vcl بواسطة Djemoui Benkhalifa (990 نقاط) | 31 مشاهدات
ادعُ اصدقائك في الفايسبوك لمشاركتك
Comodo SSL

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

لا يسمح بطلب او السؤال عن كراك او تفعيل او كسر او فك او اي شيء يخالف اتفاقيات الترخيص  مهما كان السبب ومهما كان البرنامج ونوعه. ولا حتى نشر روابط تحتوي على مثل هذه الاشياء لا في الاسئلة ولا في الاجابات ولا التعليقات . نهائيا

409 سؤال
642 إجابة
1,150 تعليق
244 مستخدم