掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字列を16進数に変換するには? (ID:35341)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
単純に変換したいのであれば、1文字ずつ文字を取り出し、文字(Char)を数値(Byte)に変換し、それを2桁の16進数に変換していけばOKです。 procedure TForm1.Button1Click(Sender: TObject); var S1: String; S2: String; i: Integer; dd: Integer; ds: Cardinal; de: Cardinal; begin ds := GetTickCount; //デバッグ用:処理時間計測開始 for dd := 1 to 2000 do //デバッグ用:繰り返し実行しないと差がわからないので begin //変数の初期化 S1 := '123あいう亜意卯'; S2 := ''; //1文字目から順に文字列の長さ分処理する for i := 1 to Length(S1) do begin //1文字抜き出して文字コードを取得し、16進数に変換 S2 := S2 + IntToHex(Ord(S1[i]), 2) + ' '; end; end; Edit1.Text := Copy(S2, 1, Length(S2) - 1); //以下、処理時間計測用 de := GetTickCount; Memo1.Lines.Add('Test1:' + IntToStr(de - ds) + 'ms'); end; 別解は以下の通り。 人によっていろいろ書き方が違います。きっと。 procedure TForm1.Button2Click(Sender: TObject); const //定数として'0'〜'F'の配列を用意 HexStr: array[0..15] of char = '0123456789ABCDEF'; var S1: String; S2: String; B: PBYTE; C: PCHAR; dd: Integer; ds: Cardinal; de: Cardinal; begin ds := GetTickCount; //デバッグ用:処理時間計測開始 for dd := 1 to 2000 do //デバッグ用:繰り返し実行しないと差がわからないので begin //変数の初期化 S1 := '123あいう亜意卯'; B := PBYTE(S1); //文字列の最初の位置のポインタを初期化(数値としてみるのでBYTE型) SetLength(S2, Length(S1) * 3 - 1); //格納する文字列の大きさを初期化 C := PCHAR(S2); //変換後の文字列の最初の位置のポインタを初期化(こっちはCHAR型) //文字列の終端は 0 なので 0 でない間続ける while B^ <> 0 do begin //16進数の1文字目。16で割るより、右にシフトしたほうが早い C^ := HexStr[B^ shr 4]; Inc(C); //16進数の2文字目。16で割ったあまりより、論理和で出した方が早い C^ := HexStr[B^ and 15]; Inc(C); //半角スペースで区切る C^ := ' '; Inc(C); //元の文字列のポインタを1つ進める Inc(B); end; end; Edit1.Text := S2; de := GetTickCount; Memo1.Lines.Add('Test2:' + IntToStr(de - ds) + 'ms'); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.