.unpack("B*")

Hi,

I have a problem with “unpack”.
When I try to unpack a string, I can easily adress the individual chars
via the array.
But when I try to extract the binary values of a string, this does not
work anymore. I can neither adress individual binary digits, nor the 8
bits corresponding to a char.
Is this a feature or a bug ? And what can I do to adress the bits
individually ? Further, how do I get the binary values of an integer ?

char = "ABCDE"
myint = char.unpack(“B*”)
puts myint >> 0100000101000010010000110100010001000101
puts myint[3] >> nil

greetings, BXS

In article brfo5f$fun$1@news.rz.uni-karlsruhe.de,

Hi,

I have a problem with “unpack”.
When I try to unpack a string, I can easily adress the individual chars
via the array.
But when I try to extract the binary values of a string, this does not
work anymore. I can neither adress individual binary digits, nor the 8
bits corresponding to a char.
Is this a feature or a bug ? And what can I do to adress the bits
individually ? Further, how do I get the binary values of an integer ?

char = “ABCDE”
myint = char.unpack(“B*”)
puts myint >> 0100000101000010010000110100010001000101
puts myint[3] >> nil

unpack returns an Array:

irb --simple-prompt

char = “ABCDE”
=> “ABCDE”
myint = char.unpack(“B*”)
=> [“0100000101000010010000110100010001000101”]
puts myint[0][3 … 3]
0
=> nil
puts myint[0][3]
48
=> nil
myint = char.unpack("B")
=> “0100000101000010010000110100010001000101”

Hope this helps,

Mike

···

Boris "BXS" Schulz bxs@hadiko.de wrote:


mike@stok.co.uk | The “`Stok’ disclaimers” apply.
http://www.stok.co.uk/~mike/ | GPG PGP Key 1024D/059913DA
mike@exegenix.com | Fingerprint 0570 71CD 6790 7C28 3D60
http://www.exegenix.com/ | 75D2 9EC4 C1C0 0599 13DA

In article brfo5f$fun$1@news.rz.uni-karlsruhe.de,

And what can I do to adress the bits
individually ? Further, how do I get the binary values of an integer ?

I don’t quite understand what this means, but

‘ABCDE’.each_byte do |b|
0.upto(7) do |bit|
print “(#{b[bit]})”
end
print “\n”
end

prints

(1)(0)(0)(0)(0)(0)(1)(0)
(0)(1)(0)(0)(0)(0)(1)(0)
(1)(1)(0)(0)(0)(0)(1)(0)
(0)(0)(1)(0)(0)(0)(1)(0)
(1)(0)(1)(0)(0)(0)(1)(0)

where Fixnum# is used to access the bits of each byte

-------------------------------------------------------------- Fixnum#
fix[ n ] → 0, 1

···

Boris "BXS" Schulz bxs@hadiko.de wrote:

 Bit Reference---Returns the nth bit in the binary representation of
 fix, where fix[0] is the least significant bit.
    a = 0b11001100101010
    30.downto(0) do |n| print a[n] end
 produces:
    0000000000000000011001100101010

Hope this helps,

Mike


mike@stok.co.uk | The “`Stok’ disclaimers” apply.
http://www.stok.co.uk/~mike/ | GPG PGP Key 1024D/059913DA
mike@exegenix.com | Fingerprint 0570 71CD 6790 7C28 3D60
http://www.exegenix.com/ | 75D2 9EC4 C1C0 0599 13DA

Hi,

both postings helped me out, thanks.

greetings, BXS