Forum: Ruby 0xff000000

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
SonOfLilit (Guest)
on 2007-01-30 12:41
(Received via mailing list)
Hello.

I am running on a 32 bit machine.

I need to pass SDL the unsigned long 0xff000000 as a mask.

  s = SDL::Surface.new_from(image_data, screen.w, screen.h, 32,
screen.w*4,
                            0x00ff0000, 0x0000ff00, 0x000000ff,
0xff0000000)

fails with "bignum too big to convert into `unsigned long' (RangeError)"

which is very understandable, considering that Ruby uses the MSB of a
VALUE
and thus Fixnums can only be 31bit on 32bit machines.

What's the best idiom to get the mask so I can pass it?

Thanks,

Aur
SonOfLilit (Guest)
on 2007-01-30 13:25
(Received via mailing list)
Looking at the ruby source showed me that ruby /can/ translate
0xff000000 to
a ulong.

The problem was a typo in my code, one extra 0.

Aur S.
Sander L. (Guest)
on 2007-01-30 13:26
(Received via mailing list)
On 1/30/07, SonOfLilit <removed_email_address@domain.invalid> wrote:
>
> which is very understandable, considering that Ruby uses the MSB of a VALUE
> and thus Fixnums can only be 31bit on 32bit machines.
>
> What's the best idiom to get the mask so I can pass it?
>
> Thanks,
>
> Aur
>
>

The number 0xff0000000 in your code has seven zeroes instead of six,
so it's too big to fit in 32 bits.
This topic is locked and can not be replied to.