如何在Ruby中将字符串转换为字节?

why*_*why 22 ruby

如何扩展String类,并附加名为to_bytes?的方法?

Nak*_*lon 40

String#bytes通过字符串字节返回枚举器..to_a可以将其转换为数组.

"asd".bytes.to_a
=> [97, 115, 100]
Run Code Online (Sandbox Code Playgroud)


the*_*Man 26

Ruby已经有了一个String#each_byte别名的方法String#bytes.

在Ruby 1.9之前,字符串等同于字节数组,即假定字符是单个字节.这对于ASCII文本和各种文本编码(如Win-1252ISO-8859-1)来说都很好,但是在Unicode上却很糟糕,我们在网络上看到的越来越多.Ruby 1.9+是Unicode识别的,字符串不再被认为是由字节组成,而是由字符组成,可以是多个字节长.

因此,如果您尝试将文本作为单个字节进行操作,则需要确保输入为ASCII,或者至少是基于单字节的字符集.如果可能的多字节字符,你应该使用String#each_charString.split(//)String.unpackU标志.


//是什么意思 String.split(//)

//与使用相同''.要么告诉split返回字符.你也可以经常使用chars.

  • `"фыв".bytes.to_a => [209,132,209,139,208,178]` - unicode字符串的字节.而且提问者需要字节,而不是字符.我没有看到任何问题.或者我没有看到什么? (9认同)

Viv*_*mar 5

借助 unpack,我们可以将字符串转换为任何格式:字节、位(MSB、LSB)、ASCII 或十六进制。请访问此链接:- http://blog.bigbinary.com/2011/07/20/ruby-pack-unpack.html。要将字符串转换为字节:-

"abcde".unpack('c*')  
=> [97, 98, 99, 100, 101]
Run Code Online (Sandbox Code Playgroud)