PDA

View Full Version : سوال: تبدیل رشته ای از صفر و یک ها به کاراکتر یا بایت



hamedalto
جمعه 14 شهریور 1393, 18:54 عصر
با سلام

در دلفی رشته ای دارم به این صورت که مقادیر باینریه

ref := '0001001010000110101101101010011000100110';

که میخوام به رشته ی معادل خودش که میشه کلمه Hamed تبدیلش کنم

خودم فکر کردم که میشه با استفاده از TBits هر کاراکتر رو به یه مقدار درست یا غلط داد ... و این شکلی اینکارو انجام دادم



data := TBits.Create;
data.Size := Length(ref);

for i := 0 to data.Size - 1 do
begin

if ref[i + 1] = '1' then
data[i] := true
else
data[i] := false;


end;


اما حالا نمیدونم چطور میشه این TBits رو تبدیل به یه رشته کرد
ممنون میشم کمکم کنید

Ananas
شنبه 15 شهریور 1393, 00:45 صبح
سلام.
با توجه به اینکه کاراکترهاتون چند بیتی هست، از ابتدا شروع کنید و به همون تعداد بیت رو برای یک کاراکتر لحاظ کنید. حالا تبدیل رشته ی باینری به کاراکتر میمونه که با عملیات بیتی به سادگی انجام میشه.
با فرض اینکه هر 8 بیت رو یک کاراکتر فرض کنیم و بخوایم تبدیل به استرینگ با کاراکتر 16 بیتی کنیم میتونیم از تابع زیر استفاده کنیم:

function BinaryToStr(const binstr:string):string;
var
char_count : Integer;
i, j, k: Integer;
ch : UInt8;
wc : array of WideChar;
begin
char_count := binstr.Length div 8;
SetLength(wc, char_count + 1);
k := 0;
for i := 0 to char_count - 1 do
begin
ch := 0;
for j := 0 to 7 do
begin
Inc(k);
if (binstr[k] = '1') then
ch := ch or (1 shl j);
end;
wc[i] := WideChar(ch);
end;
wc[char_count] := WideChar(0);
Result := WideCharToString(@wc[0]);
SetLength(wc, 0);
end;