PDA

View Full Version : تبدیل اعداد از مبنای hex به bin



omidan321
جمعه 01 شهریور 1392, 19:48 عصر
سلام به همگی
من یک سری از اعداد هگز دارم که میخام تبدیل به بایناری بشن آیاتابعی برای این کار وجود داره ؟
یا باید برای این کار روش تبدیل رو پیاده سازی کنم ؟

Nima NT
جمعه 01 شهریور 1392, 20:32 عصر
تبدیل هگز به دسیمال

function HexToDecimal(HexNumber: string): integer;
var
DecimalResult :integer;
ch : string;
i : integer;
begin
DecimalResult := 0;
for i := 1 to Length(HexNumber) do begin
ch := Copy(HexNumber, i, 1);
if Pos(ch,'0123456789ABCDEFabcdef') <> 0 then // character is a valid hex
begin
DecimalResult := DecimalResult * 16;
if Pos(ch,'0123456789') <> 0 then // character is a digit
DecimalResult := DecimalResult + strtoint(ch)
else begin
ch := UpperCase(ch);
DecimalResult := DecimalResult + Ord(ch[1]) - Ord('7');
end;
end
else
HexToDecimal := -1
end;
HexToDecimal := DecimalResult;
end;

omidan321
جمعه 01 شهریور 1392, 21:45 عصر
اینکه تبدیل هگز به دسیمال هستش

منظور من تبدیل hex به بایناری هستش

Felony
جمعه 01 شهریور 1392, 22:10 عصر
خود دلفی تابع HexToBin رو در اختیارتون میزاره .

BORHAN TEC
جمعه 01 شهریور 1392, 22:21 عصر
سلام
برای راحتی کار می توانید از این توابع استفاده کنید. در این حالت اول باید عدد Hex را با تابع HexToInt64 به فرمت دسیمال تبدیل کنید و سپس برای تبدیل آن به فرم باینری از Int64ToBinary می توانید استفاده کنید:
function HexToInt64(const aHexNumber: string): Int64;
begin
if (aHexNumber[1] = '$') then
Result := StrToInt64(aHexNumber)
else
Result := StrToInt64('$' + aHexNumber);
end;

function Int64ToBinary(Value: Int64): string;
var
I: Integer;
begin
SetLength(Result, BitsPerInt64);
for I := Length(Result) - 1 downto 0 do
begin
Result[I + 1] := Chr(48 + (Value and Int64(1)));
Value := Value shr Int64(1);
end;
end;
البته کد مربوط به تابع Int64ToBinary رو از یونیت JclLogic که در مجموعه JCL است استخراج کرده ام. توجه داشته باشید که نام اصلی این تابع در مجموعه یاد شده OrdToBinary است.
موفق باشید...

یوسف زالی
شنبه 02 شهریور 1392, 15:19 عصر
یک راه حل آبگوشتی!


function HexToBin(h: string): string;
var
i: integer;
begin
Result := '';

for i := 1 to length(h) do
case UpCase(h[i]) of
'0': Result := Result + '0000';
'1': Result := Result + '0001';
'2': Result := Result + '0010';
'3': Result := Result + '0011';
'4': Result := Result + '0100';
'5': Result := Result + '0101';
'6': Result := Result + '0110';
'7': Result := Result + '0111';
'8': Result := Result + '1000';
'9': Result := Result + '1001';
'A': Result := Result + '1010';
'B': Result := Result + '1011';
'C': Result := Result + '1100';
'D': Result := Result + '1101';
'E': Result := Result + '1110';
'F': Result := Result + '1111';
end;
end;

Ananas
شنبه 02 شهریور 1392, 16:10 عصر
برای بزرگ تر از 64 بیت میتونید از تابع زیر استفاده کنید :

function BigHexToBinary(HexNum : string):string;
const
CS_0123456789ABCDEF = '0123456789ABCDEF';
var
hex_str : string;
i, j, k: Integer;
My_Byte : Cardinal;
pWC : array of WideChar;
begin
Result := '';
hex_str := UpperCase(HexNum);
SetLength(pWC, Length(hex_str) * 4 + 1);
k := 0;
for i := 1 to Length(hex_str) do
begin
j := Pos(hex_str[i], CS_0123456789ABCDEF);
if (j > 0) then
begin
My_Byte := j - 1;
for j := 3 downto 0 do
begin
if (((1 shl j) and My_Byte) = 0) then
pWC[k] := '0'
else
pWC[k] := '1';
Inc(k);
end;
end;
end;
pWC[k] := WideChar(0);
Result := WideCharToString(@pWC[0]);
end;

مثال:

ShowMessage(BigHexToBinary('102ADF326ADF1546516551 6BD46511516516AFBC516BD4651ADFE46516BD46516F'));