09-10-2014, 12:09 AM
استفسار بخصوص تحويل قيم الهيكس الى ارقام صحيحه بمعنى لو لدى مثلا ففى اديت قيمه d82a بالهيكس يكون الناتج لها داخل اديت 2
10968
وعمليه وعكسها لو امكن
10968
وعمليه وعكسها لو امكن
Edit2.Text:=[color=Red]IntToHex[/color](StrToInt(Edit1.Text),1)paix144 كتب :السلام عليكم
كود :Edit2.Text:=[COLOR=Red]IntToHex[/COLOR](StrToInt(Edit1.Text),1)
didrosoft كتب :بعد اذن الاخ الفاضل بي سات صاحب الفضل في طرح هذه الاسئلة المهمة اسمحلي اخي ان اسئل
اخي الفاضل paix144 هل ممكن طريقة تجعل كتابة البيانات بالهكس تفصل بينها مسافة بشكل الي ...وللتوصيح مثلا حين نكتب ffffff تصبح داخل البرنامج بهذا التنسيق ff ff ff .....المطلوب طريقة اضافة الفراغ بين القيم دون ان يسبب مشاكل برمجية وحسابية
paix144 كتب :السلام عليكم
كود :edit2.text:=[color=red]inttohex[/color](strtoint(edit1.text),1)
إقتباس :اخي هذا الكود لا يعمل بعد التجريب

Edit2.Text := IntToStr(StrToInt('$' + Edit1.Text));
إقتباس :هل ممكن طريقة تجعل كتابة البيانات بالهكس تفصل بينها مسافة بشكل الي ...وللتوصيح مثلا حين نكتب ffffff تصبح داخل البرنامج بهذا التنسيق ff ff ff
{ ===> By SMP3 <=== }
const
TwoHexLookup: packed array [0 .. 255] of array [1 .. 3] of Char = ( //
'00 ', '01 ', '02 ', '03 ', '04 ', '05 ', '06 ', '07 ', '08 ', '09 ', '0A ', '0B ', '0C ', '0D ', '0E ', '0F ', '10 ', '11 ', '12 ', '13 ', '14 ', '15 ',
'16 ', '17 ', '18 ', '19 ', '1A ', '1B ', '1C ', '1D ', '1E ', '1F ', '20 ', '21 ', '22 ', '23 ', '24 ', '25 ', '26 ', '27 ', '28 ', '29 ', '2A ', '2B ',
'2C ', '2D ', '2E ', '2F ', '30 ', '31 ', '32 ', '33 ', '34 ', '35 ', '36 ', '37 ', '38 ', '39 ', '3A ', '3B ', '3C ', '3D ', '3E ', '3F ', '40 ', '41 ',
'42 ', '43 ', '44 ', '45 ', '46 ', '47 ', '48 ', '49 ', '4A ', '4B ', '4C ', '4D ', '4E ', '4F ', '50 ', '51 ', '52 ', '53 ', '54 ', '55 ', '56 ', '57 ',
'58 ', '59 ', '5A ', '5B ', '5C ', '5D ', '5E ', '5F ', '60 ', '61 ', '62 ', '63 ', '64 ', '65 ', '66 ', '67 ', '68 ', '69 ', '6A ', '6B ', '6C ', '6D ',
'6E ', '6F ', '70 ', '71 ', '72 ', '73 ', '74 ', '75 ', '76 ', '77 ', '78 ', '79 ', '7A ', '7B ', '7C ', '7D ', '7E ', '7F ', '80 ', '81 ', '82 ', '83 ',
'84 ', '85 ', '86 ', '87 ', '88 ', '89 ', '8A ', '8B ', '8C ', '8D ', '8E ', '8F ', '90 ', '91 ', '92 ', '93 ', '94 ', '95 ', '96 ', '97 ', '98 ', '99 ',
'9A ', '9B ', '9C ', '9D ', '9E ', '9F ', 'A0 ', 'A1 ', 'A2 ', 'A3 ', 'A4 ', 'A5 ', 'A6 ', 'A7 ', 'A8 ', 'A9 ', 'AA ', 'AB ', 'AC ', 'AD ', 'AE ', 'AF ',
'B0 ', 'B1 ', 'B2 ', 'B3 ', 'B4 ', 'B5 ', 'B6 ', 'B7 ', 'B8 ', 'B9 ', 'BA ', 'BB ', 'BC ', 'BD ', 'BE ', 'BF ', 'C0 ', 'C1 ', 'C2 ', 'C3 ', 'C4 ', 'C5 ',
'C6 ', 'C7 ', 'C8 ', 'C9 ', 'CA ', 'CB ', 'CC ', 'CD ', 'CE ', 'CF ', 'D0 ', 'D1 ', 'D2 ', 'D3 ', 'D4 ', 'D5 ', 'D6 ', 'D7 ', 'D8 ', 'D9 ', 'DA ', 'DB ',
'DC ', 'DD ', 'DE ', 'DF ', 'E0 ', 'E1 ', 'E2 ', 'E3 ', 'E4 ', 'E5 ', 'E6 ', 'E7 ', 'E8 ', 'E9 ', 'EA ', 'EB ', 'EC ', 'ED ', 'EE ', 'EF ', 'F0 ', 'F1 ',
'F2 ', 'F3 ', 'F4 ', 'F5 ', 'F6 ', 'F7 ', 'F8 ', 'F9 ', 'FA ', 'FB ', 'FC ', 'FD ', 'FE ', 'FF ');
HexMask: array [0 .. 3] of DWORD = ($FF, $FF00, $FF0000, $FF000000);
HexMaskMove: array [0 .. 3] of DWORD = ($0, $8, $10, $18);
function IntToMyFormat(Value: UINT): string;
var
LValue: UInt64;
nDigit, i: integer;
begin
Result := '';
LValue := Value;
if LValue and ($FF shl $18) <> 0 then
nDigit := 8
else if LValue and ($FF shl $10) <> 0 then
nDigit := 6
else if LValue and $FF00 <> 0 then
nDigit := 4
else
nDigit := 2;
for i := (nDigit shr 1) downto 1 do
begin
LValue := Byte((Value and HexMask[i - 1]) shr HexMaskMove[i - 1]);
Result := Result + TwoHexLookup[LValue];
end;
Result := Trim(Result);
end;
procedure TForm2.Button1Click(Sender: TObject);
var
sHex: string;
begin
sHex := IntToMyFormat($FFFFFF);
Edit2.Text := sHex; // sHex = FF FF FF .
end;
function ConvertToInt(Hex : Cardinal):Integer ;
begin
Result := StrToInt(Format('%d', [Hex]));
end;
function ConvertToHexAsString(i : Byte):string;
begin
Result := IntToHex(i, 2);
end;
function ConvertToHexAsString(i : Word):string;
begin
Result := IntToHex(i, 4);
end;
function ConvertToHexAsString(i : DWORD):string;
begin
Result := IntToHex(i, 8);
end;
function ConvertToHexAsString(i : UInt64):string;
begin
Result := IntToHex(i, 16);
end;
إقتباس :هل ممكن طريقة تجعل كتابة البيانات بالهكس تفصل بينها مسافة بشكل الي ...وللتوصيح مثلا حين نكتب ffffff تصبح داخل البرنامج بهذا التنسيق ff ff ff
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
mmo1: TMemo;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
arrX : array[0..19] of Byte = ($55, $2, $FF, $C3, $A1, $EE, $71, $4E, $CD, $10,
$32, $85, $A9, $E3, $DF, $A, $CE, $00, $00, $C3);
function ConvertToHexAsString(i : UInt64):string; overload;
function ConvertToHexAsString(i : DWORD):string; overload;
function ConvertToHexAsString(i : Word):string; overload;
function ConvertToHexAsString(i : Byte):string; overload;
implementation
{$R *.dfm}
function ConvertToInt(Hex : Cardinal):Integer ;
begin
Result := StrToInt(Format('%d', [Hex]));
end;
function ConvertToHexAsString(i : Byte):string;
begin
Result := IntToHex(i, 2);
end;
function ConvertToHexAsString(i : Word):string;
begin
Result := IntToHex(i, 4);
end;
function ConvertToHexAsString(i : DWORD):string;
begin
Result := IntToHex(i, 8);
end;
function ConvertToHexAsString(i : UInt64):string;
begin
Result := IntToHex(i, 16);
end;
procedure TForm1.btn1Click(Sender: TObject);
var
sLine : string;
i : Integer;
begin
//test ConvertToInt
mmo1.Lines.Add(IntToStr(ConvertToInt($FF)));
//test ConvertToHexAsString
mmo1.Lines.Add(ConvertToHexAsString(11111111111111111111));
//test add byte by byte with space between them into memo
ZeroMemory(@sLine, SizeOf(sLine));
for i := 0 to Length(arrX)-1 do
sLine := sLine + ' ' + ConvertToHexAsString(ArrX[i]);
mmo1.Lines.Add(sLine);
end;
end.