1

16 進数をテキストに変換する関数を以下に示します。ほとんどの 16 進数からテキストへの変換では問題なく動作しますが、異常な結果が得られます。

たとえば、16 進値は次のとおりです。

050003d40201414c4552542d42656c6f772038353435206966204e462054726164657320666f722031352d3230206d696e75746573202c77617463682050414e49432050414e4943207570746f20353439332d2d383437360d0a0d0a53656c6c204549434845522061742032343931302e2e2e73746f706c6f7373732032353

hex2text 関数を使用して得た結果 = |

正しい結果は次のようになります。

ALERT-Below 8545 if NF Trades for 15-20 minutes ,watch PANIC PANIC upto 5493--8476........

(注: hex2ascii 変換 Web サイトhttp://www.rapidtables.com/convert/number/hex-to-ascii.htmを使用して正しい結果を取得しました)

私の Hex2text 関数は次のとおりです。

Public Function HexToText(text As Range) As String
    Dim i As Integer
    Dim DummyStr As String

    For i = 1 To Len(text) Step 2
       DummyStr = DummyStr & Chr(Val("&H" & (Mid(text, i, 2))))
       DoEvents
    Next i

    HexToText = DummyStr
End Function
4

1 に答える 1

1

アレックスが述べたように、最初の 6 バイトが問題を引き起こしています。

ForNext ループを変更して、13 番目の文字から開始することもできます。

 For i = 13 To Len(text) Step 2

または、ASCII コードが 32 未満の文字を除外することもできます。

If Val("&H" & (Mid(Text, i, 2))) > 31 Then DummyStr = DummyStr & Chr(Val("&H" & (Mid(Text, i, 2))))

または、それらを(たとえば)スペースに置き換えます..

If Val("&H" & (Mid(Text, i, 2))) > 31 Then 
   DummyStr = DummyStr & Chr(Val("&H" & (Mid(Text, i, 2))))
Else
   DummyStr = DummyStr & " "
End If
于 2017-01-23T15:21:45.787 に答える