如何将字符串传递给函数,以便稍后创建二进制文件?

发布于 2024-11-08 18:24:46 字数 164 浏览 0 评论 0原文

这是我的函数,当我调用 my_conv("2312144", 10, 10) 时,它给了我“错误的参数”错误

my_conv(S, Start, End) ->
  Res = <<Start:8, End:8, S:1024>>.

This is my function, when I call my_conv("2312144", 10, 10), it gives me "bad argument" error

my_conv(S, Start, End) ->
  Res = <<Start:8, End:8, S:1024>>.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

老旧海报 2024-11-15 18:24:46

如果不进行转换,则不能在二进制表达式中使用字符串。您需要使用 list_to_binary(S) 将字符串转换为二进制文件。

我建议使用以下表达式:(

my_conv(S, Start, End) ->
    list_to_binary(<<Start:8, End:8>>, S]).

请注意,list_to_binary/1 实际上接受深度 IO 列表,而不仅仅是纯字符串)。

如果您打算将二进制文件填充到 1024 字节(或 1040 字节,包括换行符),您可以稍后这样做:

my_conv(S, Start, End) ->
    pad(1040, list_to_binary(<<Start:8, End:8>>, S])).

pad(Width, Binary) ->
    case Width = byte_size(Binary) of
        N when N =< 0 -> Binary;
        N -> <<Binary/binary, 0:(N*8)>>
    end.

A string cannot be used inside a binary expression without conversion. You need to convert the string to a binary by using list_to_binary(S).

I would recommend the following expression:

my_conv(S, Start, End) ->
    list_to_binary(<<Start:8, End:8>>, S]).

(Note here that list_to_binary/1 actually accepts a deep IO list and not just a pure string).

If you intend to pad your binary to 1024 bytes (or 1040 including your newlines) you can do so afterwards:

my_conv(S, Start, End) ->
    pad(1040, list_to_binary(<<Start:8, End:8>>, S])).

pad(Width, Binary) ->
    case Width = byte_size(Binary) of
        N when N =< 0 -> Binary;
        N -> <<Binary/binary, 0:(N*8)>>
    end.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文