StringをHEX表示したいnoですが

解決


Msun  2005-11-04 08:55:22  No: 18433  IP: 192.*.*.*

送信データ(HEX:00,21,93,03,b1)をCommXでの受信バッファの表示は、#0,'!',#147,#3,'ァ'です。これを、00219303b1 と変換表示したいのですがうまくいきません。どなたか教えてください。ちなみに環境は、Delphi2005,
WinXpです。よろしくお願いします。

編集 削除
宣伝  2005-11-04 09:20:09  No: 18434  IP: 192.*.*.*

どううまくいきませんか?

編集 削除
宣伝  2005-11-04 09:22:14  No: 18435  IP: 192.*.*.*

IntToHexは?

編集 削除
Msun  2005-11-04 13:05:32  No: 18436  IP: 192.*.*.*

IntToHex使っていますが、21をIntToHexすると15となり表示すると'!'。
うまくいきません。

編集 削除
りおりお  2005-11-04 13:28:00  No: 18437  IP: 192.*.*.*

> IntToHex使っていますが、21をIntToHexすると15となり表示すると'!'。

数値と文字、文字コードについての知識が必要ですね。あと10進と16進数についても。

数値の十進表示の21は、16進表示で15となり、一方21を16進数として
これを文字コードとして表示すると '!' に対応しています。

混乱しなければ、うまくいっているようですが。

編集 削除
Msun  2005-11-04 14:12:43  No: 18438  IP: 192.*.*.*

#0   -> '00'
'!'  -> '21'
#147 -> '93'
#3   -> '03'
'ア'  -> 'b1'
と変換表示したいのですがうまくいきません。

編集 削除
孫の手  2005-11-04 14:26:22  No: 18439  IP: 192.*.*.*

var
  Buf: PChar = #$00#$21#$93#$03#$b1#$00;

procedure TForm1.ButtonXClick(Sender: TObject);
  function func(Buf: PChar; Size: Integer): string;
  var
   i: Integer;
  begin
   result := '';
   for i:=0 to Pred(Size) do begin
  result := result + IntToHex(Byte(Buf[i]), 2);
   end;
  end;
begin
  MemoX.Lines.Add(func(Buf, 5));
end;

編集 削除
宣伝  2005-11-04 14:38:38  No: 18440  IP: 192.*.*.*

IntToHex(Ord('!'), 2) = '21'

'!' = 33 = $21

編集 削除
Msun  2005-11-04 17:04:12  No: 18441  IP: 192.*.*.*

宣伝さん、りおりおさん  そして  孫の手さんへ
アドバイスありがとうございました。
目的の受信表示が出来るようになりました。

編集 削除