# Broken pack/unpack workaround

**URL:** <https://www.ruby-forum.com/t/broken-pack-unpack-workaround/80416>\
**Category:** Ruby\
**Created:** [March 13, 2006, 4:31pm UTC](https://www.ruby-forum.com/t/broken-pack-unpack-workaround/80416 "2006-03-13T16:31:27Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Hans\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a587f6/32.png) [@Hans\_F](https://www.ruby-forum.com/u/Hans_F)\
**Post date:** [March 13, 2006, 4:31pm UTC](https://www.ruby-forum.com/t/broken-pack-unpack-workaround/80416/1 "2006-03-13T16:31:27Z")

</div>

Array#pack and String#unpack are broken on OS X Tiger’s ruby build. This  
is known. I’m writing a lib where pack and unpack are used extensively  
and would like to provide a workaround. Does anyone have such a  
workaround already worked out? I can’t think of a real easy way to do it  
so I thought I’d check before running the gauntlet.

See also [http://hans.fugal.net/yodl/blosxom.cgi/mac/ruby-pack.html](http://hans.fugal.net/yodl/blosxom.cgi/mac/ruby-pack.html)

---

<div class="post-metadata">

**Author:** ![Hans\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a587f6/32.png) [@Hans\_F](https://www.ruby-forum.com/u/Hans_F)\
**Post date:** [March 13, 2006, 5:48pm UTC](https://www.ruby-forum.com/t/broken-pack-unpack-workaround/80416/2 "2006-03-13T17:48:39Z")

</div>

Here’s a simplistic solution:

broken = (1 == [1].pack(‘n’)[0])  
if broken  
class String  
alias\_method :broken\_unpack, :unpack  
def unpack(spec)  
return broken\_unpack(spec.tr(‘nvNV’, ‘vnVN’))  
end  
end  
class Array  
alias\_method :broken\_pack, :pack  
def pack(spec)  
return broken\_pack(spec.tr(‘nvNV’, ‘vnVN’))  
end  
end  
end

p([1].pack(‘n’))  
p([1].pack(‘v’))  
p([1].pack(‘N’))  
p([1].pack(‘V’))

Paul.

---

<div class="post-metadata">

**Author:** ![Hans\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a587f6/32.png) [@Hans\_F](https://www.ruby-forum.com/u/Hans_F)\
**Post date:** [March 13, 2006, 5:54pm UTC](https://www.ruby-forum.com/t/broken-pack-unpack-workaround/80416/3 "2006-03-13T17:54:45Z")

</div>

Paul B. wrote:

> ```
> return broken_unpack(spec.tr('nvNV', 'vnVN'))
> 
> ```

tr never occurred to me. That’s perfect!
