2015-05-31 21 views
9

tôi phải chuyển đổi một chuỗi thập lục phân cho một số nguyên hệ thập lục phân, như thế này:Chuyển đổi một chuỗi hex đến một int hex

color = "0xFF00FF" #can be any color else, defined by functions 
colorto = 0xFF00FF #copy of color, but from string to integer without changes 

tôi có thể có định dạng RGB quá.

tôi bắt buộc phải làm điều này vì chức năng này đi sau:

def i2s int, len 
    i = 1 
    out = "".force_encoding('binary') 
    max = 127**(len-1) 

    while i <= len 
    num = int/max 
    int -= num*max 
    out << (num + 1) 
    max /= 127 
    i += 1 
    end 

    out 
end 

tôi thấy here rằng số nguyên hệ thập lục phân tồn tại. ai đó có thể giúp tôi vấn đề này không?

+0

Tại sao bạn mong chờ 'color.to_i' được bất cứ điều gì khác hơn '0'? Bạn đã đọc tài liệu api (http://apidock.com/ruby/String/to_i) cho thấy cơ sở mặc định là '10', do đó chuỗi của bạn có số không thì 'x' sẽ được xem là số không thập phân. Bạn cần nói phương thức 'to_i' là chuỗi của bạn là chuỗi ký tự hex - và API hiển thị điều đó. – Pavling

Trả lời

18

Bạn sẽ cần cung cấp luận cứ nguyên cơ sở để String#to_i phương pháp:

irb> color = "0xFF00FF" 
irb> color.to_i(16) 
=> 16711935 
irb> color.to_i(16).to_s(16) 
=> "ff00ff" 
irb> '%#X' % color.to_i(16) 
=> "0XFF00FF" 
+0

Nó không hoạt động, nó trả về một chuỗi quá – FrereDePute

+0

@FrereDePute Wut?! 'color.to_i (16) == 0xff00ff # true' –

+0

Rất tiếc, nó hoạt động tốt! Cảm ơn bạn ! – FrereDePute

8

Trước hết, một số nguyên không bao giờ là hệ thập lục phân. Mỗi số nguyên có một hệ thập lục phân thập lục phân, nhưng đó là một chuỗi.

Để chuyển đổi một chuỗi có chứa biểu diễn thập lục phân của một số nguyên với tiền tố 0x thành số nguyên trong Ruby, hãy gọi hàm Integer trên đó.

Integer("0x0000FF") # => 255 
+0

Nó không phải là những gì tôi cần, nhưng nó thực sự tốt để biết! – FrereDePute

+0

Hoặc cách khác, 'Số nguyên (" 0000FF ", 16)' – Hubro

Các vấn đề liên quan