掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WideStringを16進数で表示するには? (ID:22330)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Delphi7+WinXP Proで開発しています。 文字列を受け取りそれを16進数でダンプする関数を作っています。 Shift-JIS形式とUNICODE形式で分けて以下のような関数を作りました。 //以下Shift-JIS版 function StringToHexList(Source:String; StrList:TStrings): Integer; var ws:WideString; len,i:Integer; ss,hex:String; begin StrList.Clear; ws:=Source; len:=Length(ws); SetLength(ss,2); for i:=1 to len do begin ss:=Copy(ws,i,1); hex:=IntToHex(Ord(ss[1]),2); hex:=hex+IntToHex(Ord(ss[2]),2); StrList.Add(hex); end; Result:=StrList.Count; end; //以下UNICODE版 function StringToHexListW(Source:String; StrList: TStrings): Integer; var ws:WideString; len,i:Integer; S:array[0..10] of char; hex:String; begin StrList.Clear; ws:=Source; len:=Length(ws); for i:=1 to len do begin StrLCopy(S,PChar(@ws[i]),2); //←ここでおかしくなる hex:=IntToHex(Ord(S[1]),2); hex:=hex+IntToHex(Ord(S[0]),2); StrList.Add(hex); end; Result:=StrList.Count; end; ほとんどの文字では正常に動くのですが、UNICODE版で「退(U+9000)」と 外字の先頭(U+E000)ではおかしな結果となります。 関数内の StrLCopy でコピーが失敗しているのまではわかったのですが、 どう回避してよいかがわかりません。 回避策がわかる方がおりましたら、教えて頂きたいです。 よろしくお願い致します。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.