我想知道如何在Elixir中使用十六進制字符串。具體而言,我有興趣將Hex轉換爲ASCII。如何用Elixir打包/解壓十六進制字符串(高位半字節)
在Ruby中,這種實現可能是:
["001C7F616A8B002128C1A33E8100"].pack('H*').gsub(/[^[:print:]]/, '.')
我將如何實現與靈藥這項任務?我曾嘗試過:
<<00, 01, C7, F6...>>
但這不是字符串的十六進制的正確表示形式。感謝您的時間和協助!
所以我取得了一些進展,但我目前正在努力與此遞歸方面。
這是我的解決方案迄今:
defmodule ElixirNetworkTools do
def decode(payload) do
upper_payload = String.upcase payload
case Base.decode16(upper_payload) do
:error -> decode_with_nonprintable_characters(payload)
{:ok, decoded_payload} -> decoded_payload
end
|> IO.write
end
def decode_with_nonprintable_characters(payload) do
String.chunk(payload, ~r/\w{2}/)
|> Enum.each(fn(byte) ->
case Base.decode16(byte) do
:error -> '.'
{:ok, decoded_payload} -> decoded_payload
end
end)
end
end
感謝這個解決方案!看到你解決問題的方法真的很有幫助。可悲的是,雖然我無法使用它,因爲我正在致力於構建一個十六進制有效負載檢查器,所以需要替換它,所以我可能/可能需要將字符顯示爲一個句點。有了這個說法,這對於看到另一種處理方法非常有幫助,而不需要明確的檢查,而是通過模式匹配解決方案。謝謝!現在在https://howistart.org/posts/elixir/1 – kkirsche
做你的教程很高興幫助!我已經添加了一個關於如何用點替換非ascii的例子。 –