База по умолчанию для String#to_i
, конечно, 10, но вы пытаетесь конвертировать гекс так, чтобы вы хотели .to_i(16)
. Если вы не укажете основание, to_i
остановится, когда увидит первое недесятичное значение и отсюда ваше усечение.
Вы хотите сказать это:
x.unpack('H*')[0].to_i(16)
Например:
>> "633198cc66331c0001c700c0633198cc66331c0001c700c063312e98cc66331c0001c700c0".to_i
=> 633198
>> "633198cc66331c0001c700c0633198cc66331c0001c700c063312e98cc66331c0001c700c0".to_i(16)
=> 49331350698902676183344474146684368690988113012187221237314170009285390086987127695278272