Fast PDU Encode/Decode
#1
Protocol Description Unit -PDU
PDU Encode/Decode ترميز سريع وفك الترميز الصيغ PDU
كود :
procedure Bin2Hex(Buffer, Text: PChar; BufSize: Integer); assembler; const Convert: array[0..15] of Char = '0123456789ABCDEF'; p: array[1..7] of Byte = ($1, $3, $7, $F, $1F, $3F, $7F); var i, Count: Integer; c, Tmp, r: Byte; begin r:= Byte(Buffer[0]); Count:= 1; for i := 0 to BufSize - 1 do if Count < 8 then begin c:= r; if i < (BufSize - 1) then begin Tmp:= Byte(Buffer[I + 1]); r:= Tmp shr Count; c:= c or ((Tmp and p[Count]) shl (8 - Count)); Inc(Count); end; Text[0] := Convert[c shr 4]; Text[1] := Convert[c and $F]; Inc(Text, 2); end else begin Count:= 1; if i < BufSize then r:= Byte(Buffer[i + 1]); end; end; function Hex2Bin(Text, Buffer: PChar; BufSize: Integer): Integer; assembler; const Convert: array['0'..'f'] of SmallInt = ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,10,11,12,13,14,15); p: array[1..7] of Byte = ($7F, $3F, $1F, $F, $7, $3, $1); var i, Count: Integer; Tmp, c, r: Byte; begin I := BufSize; Count:= 1; while i > 0 do begin if not (Text[0] in ['0'..'f']) or not (Text[1] in ['0'..'f']) then Break; c:= (Convert[Text[0]] shl 4) + Convert[Text[1]]; tmp:= c shr (8 - Count); c:= c and p[Count]; if Count > 1 then c:= (c shl (Count - 1)) or r; r:= Tmp; Buffer[0] := Char(c); if Count = 7 then begin Inc(Buffer); Buffer[0] := Char(r); Count:= 1; end else Inc(Count); Inc(Buffer); Inc(Text, 2); Dec(i); end; Result := BufSize - i; end; function EncodePDU7bits(const Source: String): String; var Leng: Integer; begin Leng:= Length(Source); Leng:= (Leng * 2)- ((Leng div 8) * 2); SetLength(Result, Leng); Bin2Hex(PChar(Source), PChar(Result), Length(Source)); end; function DecodePDU7bits(const CodedStr: String): String; var Leng: Integer; begin Leng:= Length(CodedStr) div 2; SetLength(Result, Leng+ (Leng div 7)); Hex2Bin(PChar(CodedStr), PChar(Result), Leng); end;
الاستخدام:
كود :
procedure TForm1.Button1Click(Sender: TObject); begin Memo3.Text:= EncodePDU7bits(Memo1.Text); end; procedure TForm1.Button2Click(Sender: TObject); begin Memo2.Text:= DecodePDU7bits(Memo3.Text); end;
بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
[-] كل من 3 users say قال شكرا ل kachwahed على المشاركة المفيدة
  • mohamed49, wadoud, Delphi4Us
الرد
#2
مشكور جدا أخي الكريم بس لوكان تعطينا فكرة شوهو ال pdu
أنا بحثت شو ويبدو أن له علاقة برسائل ال sms في انظمة gsm بس الفكرة مو هون الفكرة كيفية الاسفادة منه؟؟؟
الرد
#3
السلام عليكم
تحدث بالعربية حتى يفهمك الجميع Smile
إقتباس :شوهو ال pdu
يستخدم لترميز:
إقتباس :رسائل ال sms في انظمة gsm
إقتباس :كيفية الاسفادة منه؟؟؟
تخزين حجم أقل (حيث رسال SMS لا تتعدى 160 محرف)، واستخدام الأحرف اللاتينية فقط (دون الرموز).
إضافة إلى معلومات حول المرسل والرسالة.
للمزيد:
كود :
http://www.twit88.com/home/utility/sms-pdu-encode-decode
أيضا :google: و :thanks: على المشاركة Smile
ملحوظة: لا يدعم Unicode.
بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
[-] كل من 2 users say قال شكرا ل kachwahed على المشاركة المفيدة
  • mohamed49, Delphi4Us
الرد
#4
ألف شكر لك اخي الكريم

أنا اتحدث العربي بس أخطاء مطبعية و أسف جدا

سلامي
الرد
#5
جزاك الله خيرا على الافادة
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم