如何将字符串反转为bin?

时间:2011-07-01 22:56:09

标签: delphi delphi-7

如何将bin转换为字符串? 例如:

 string:='s';----------->bin:='0011';

如何将其反转?

我的stringtobin代码是:

function StrToBinStr( aString: string ): string;
var
i : integer;
begin
for i := 1 to Length( aString ) do
result := IntToBin( byte(aString[i]), 4 );
end;

function IntToBin(aValue, Bits: integer): string;
var
i : integer;
begin
for i := Bits-1 downto 0 do
result := result + Copy( '10', Word(((1 shl i) and AValue) = 0)+1, 1 );
end;

2 个答案:

答案 0 :(得分:3)

这可能有所帮助:

function  IntToBin( const Value: LongInt; Digits: Byte;
  const Spaces: Boolean ): AnsiString;
begin
  if Digits > 32 then
    Digits := 32;
  SetLength( Result, Digits );
  Result := '';
  while Digits > 0 do
  begin
    if (Spaces) and ((Digits mod 8) = 0) then
      Result := Result + #32;
    Dec(Digits, 1);
    Result := Result + IntToStr((Value shr Digits) and 1);
  end;
end;

function BinToInt( Value: AnsiString ): LongInt;
var
  cTmp: AnsiChar;
  liCtr, liLen: LongInt;
begin
  Value := AnsiString(StringReplace(Value, #32, '', [rfReplaceAll]));
  liLen := Length(Value);
  cTmp := Value[liLen];
  Dec(liLen);
  Result := StrToInt(cTmp);
  liCtr := 1;
  while liLen > 0 do
  begin
    cTmp := Value[liLen];
    Dec( liLen );
    Result := Result + (StrToInt(cTmp) shl liCtr );
    Inc(liCtr);
  end;
end;

样品使用:

procedure TForm1.FormShow(Sender: TObject);
var
  TestStr: AnsiString;
  i: Integer;
  Temp: AnsiString;
begin
  TestStr := 'ABC';
  Temp := '';
  for i := 1 to Length(TestStr) do
    Temp := Temp + IntToBin(Ord(AnsiChar(TestStr[i])), 8, False);
  ShowMessage('Temp = ' + Temp);

  TestStr := '';
  i := 1;
  while i < Length(Temp) do
  begin
    TestStr := TestStr + AnsiChar(BinToInt(Copy(Temp, i, 8)));
    Inc(i, 8);
  end;
  ShowMessage('TestStr = ' + TestStr);
end;

正如我在对原始问题的评论中所说,我认为这是一个可怕的想法,但这些都有效。

答案 1 :(得分:0)

function _ConvertHexToWideString(AHex: AnsiString): WideString;
var wBinaryStream: TMemoryStream;
begin
  try
    wBinaryStream := TMemoryStream.Create;

    try
      wBinaryStream.Size := Length(AHex) div 2;

      if wBinaryStream.Size > 0 then
        HexToBin(PAnsiChar(AHex), wBinaryStream.Memory, wBinaryStream.Size);
    except
    end;

    SetString(Result, PWideChar(wBinaryStream.Memory), wBinaryStream.Size div SizeOf(WideChar));
  finally
    FreeAndNil(wBinaryStream);
  end;
end;