将时间字符串转换为单个十六进制字节

时间:2015-12-29 07:18:17

标签: python datetime hex byte

dt = datetime.datetime.now()
dt = dt.strftime('%Y%m%d%H%M%S')
t = dt.decode("hex")
print list(t)

正在返回[' ', '\x15', '\x12', ')', '\x10', ')', '6']。但它没有转换为十六进制。虽然我想有例如。年度 - 2015必须转换为\x07\xdf,并相应地将month, date, hour, minute, second转换为各自的hex。有谁可以帮我解决这个问题?

2 个答案:

答案 0 :(得分:2)

我不知道这是否是你要找的东西:

for (int n=0; n<=100; n++) { //where ; was before
    Sum +=n; // same as Sum = Sum +n; 
    System.out.println (Sum);        
}       

这将为您提供所需的十六进制数字。如果您希望它们在列表中,您可以将它们中的每一个附加到空列表中。

答案 1 :(得分:1)

如果你打印:

dt = dt.strftime('%Y%m%d%H%M%S')
print list(dt)

你会得到:

  

[&#39; 2&#39;,&#39; 0&#39;,&#39; 1&#39;,&#39; 5&#39;,&#39; 1&#39;,& #39; 2&#39;,&#39; 2&#39;,&#39; 9&#39;,&#39; 0&#39;,&#39; 8&#39;,&#39; 3&# 39;,&#39; 7&#39;,&#39; 3&#39;,&#39; 2&#39;]

如果您转换为十六进制:

t = dt.decode("hex")
print list(t)

你会得到:

  

[&#39; &#39;,&#39; \ x15&#39;,&#39; \ x12&#39;,&#39;)&#39;,&#39; \ x08&#39;,&#39; B& #39;,&#39; \ x07&#39;]

Jorge Torres这样的混合解决方案就是这样的:

mystr=""
mystr+=hex(dt.year)
mystr+=hex(dt.month)
mystr+=hex(dt.day)
mystr+=hex(dt.hour)
mystr+=hex(dt.minute)
mystr+=hex(dt.second)
print mystr

结果将是你想要的:

  

0x7df0xc0x1d0x80x2f0x6

如果您担心性能问题,我的机器中的1M迭代示例(core2duo)我已删除了打印件:

@timeit
def tst_1():
    for i in range(1000000):
        dt = datetime.datetime.now()
        mystr=""
        mystr+=hex(dt.year)
        mystr+=hex(dt.month)
        mystr+=hex(dt.day)
        mystr+=hex(dt.hour)
        mystr+=hex(dt.minute)
        mystr+=hex(dt.second)
        #print mystr

@timeit 
def tst_2():
    for i in range(1000000):
        dt = datetime.datetime.now()
        dt = dt.strftime('%Y%m%d%H%M%S')
        t = dt.decode("hex")
        #print list(t)  

结果:

  

FUNC:&#39; tst_1&#39; args:[(),{}]花了:3.6850秒

     

FUNC:&#39; tst_2&#39; args:[(),{}]花了:9.9950秒

因此,从字符串解码十六进制实际上需要花费2.7倍的时间。