2016-02-12 56 views
3

我将RGB值保存为9个字符的字符串。由于各种原因,我需要将其转换为整数,然后再回到9个字符的字符串。将RGB从字符串转换为数字并返回

String1 = '000004000' # almost black 
Num = int(String1) 
print Num 
>>> 2048 
String2 = ????(Num) 
print String2 
>>> 000004000 

我该怎么做?

回答

2
String2 = "%09d"%Num 

我猜...林不知道如何int('000004000')等于2048 ..

[编辑]经过一番侦查工作,我现在认识到它的八进制数...

oct(2048).zfill(9) 

粗这将是成问题的,如果最左边的数字是非零的任何东西...如果它是你可以做类似

String2 = oct(2048).zfill(9) if len(oct(2048)) <= 9 else oct(2048)[:9] 
0

以下应该做你需要的东西:

import socket 
import struct 

def to_integer(text): 
    return struct.unpack('>I', socket.inet_aton('0.{}.{}.{}'.format(text[:3], text[3:6], text[6:])))[0] 

def to_string(value): 
    return '{:03d}{:03d}{:03d}'.format((value >> 16) & 255, (value >> 8) & 255, value & 255,) 

print to_integer('000000001') 
print to_integer('000004000') 

print to_string(1) 
print to_string(1024) 

这将显示如下:

1 
1024 
000000001 
000004000 

你拥有的字符串的形式为[0-255][0-255][0-255]to_integer利用库函数将IP地址转换为数字(恰好具有相同的格式,除了有4个部分)。

+0

谢谢,它工作得很好! – user1530405

+0

太棒了,很高兴它解决了你的问题!完成后,请不要忘记点击灰色的勾号以接受解决方案。 –

+0

我说得太快了。上面的例程在任何情况下都不起作用。有一些例子不起作用:“191191191”或“255255008”。我得到错误消息“ValueError:invalid int for()with base 8:'255255008' – user1530405

相关问题