在Elixir中将二进制字符串转换为十六进制或者将十六进制转换为二进制字符串

19

如何在Elixir中将二进制字符串转换为十六进制字符串,反之亦然?

关于其他“主流”语言的此主题,SO上有一些帖子。甚至有一个SO帖子比较各种C#实现的性能

我们如何在elixir中实现这个功能?

我的实现太丑陋了,无法分享... :(


虽然这不是一个正确的转换方式,但如果目标只是查看二进制形式的值,而不是进一步处理它们,inspect("test", base: :hex) == "<<0x74, 0x65, 0x73, 0x74>>" 也是一个很好的选择! - undefined
2个回答

27

有一个Base.encode16/2函数:

iex(1)> Base.encode16("foo")
"666F6F"

您还可以指定大小写:

iex(2)> Base.encode16("foo", case: :lower)
"666f6f"

15

我来这里是想要在十六进制字符串和二进制数据(而不是字符串)之间进行转换。被接受的答案是正确的,因为 Elixir 中的字符串是二进制的,但我觉得回答中使用“foo”作为例子有些令人困惑。Base.encode16/2/Base.decode16!/2 可以处理所有可二进制化的数据,其中字符串是一个子集。

十六进制到二进制:

Base.decode16!("0001FEFF")
=> <<0, 1, 254, 255>>

二进制转十六进制:

Base.encode16(<<0, 1, 255, 255>>)
=> "0001FFFF"

Base.encode16(<<0x66, 0x6F, 0x6F>>) # equivalent to "foo"
=> "666F6F"

Base.encode16("foo")
=> "666F6F"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接