2011-09-16 41 views
2

我需要將此PHP函數轉換爲Python,但我甚至不知道什麼是空格填充的二進制字符串。Python中的空格填充二進制字符串

pack('A*', $string); 

Python有struct.pack什麼應該可能使用,但我在這裏結束。有人可以幫助解釋我的行爲嗎?

謝謝!


UPDATE:

這是整個代碼,我需要在Python實現。到現在爲止我從來沒有聽說過包(),所以我想了解它究竟這樣做我能做到這一點在Python:

function getSIGN($PID, $ID, $DESC, $PRICE, $URL, $EMAIL, $PWD) { 
    $bHash = pack('A*', $PID . $ID . $DESC . $PRICE . $URL . $EMAIL); 
    $bPWD = pack('A*', $PWD); 
    $SIGN = strtoupper(hash_hmac('sha256', $bHash, $bPWD, false)); 
    return $SIGN; 
} 
+0

什麼是對一個例子輸入這個函數調用的返回??? – rocksportrocker

回答

1

我認爲這是一個空操作。

$string = 'asdf'; 
print pack('A10', $string) . "|<-\n"; 

會給你

asdf  |<- 

由於*意思是「採取儘可能多的,」從來就沒有什麼理由去墊。

恕我直言,你可以扔掉整條線。


Re。您的更新:

pack函數仍然沒有任何用途,除了可能隱式地將所有非字符串參數轉換爲字符串。

下面是你將如何在Python中做到這一點。我冒昧地改變參數的順序,所以我可以使用參數包裝(這完全不像字符串包裝;)。

import hmac, hashlib 

def get_sign(key, *data): 
    msg = ''.join(str(item) for item in data) 
    h = hmac.new(key, msg, hashlib.sha256) 
    return h.hexdigest().upper() 

PHP:

$ print getSIGN(1234, 456, "foo", '123.45', 'http://example.com', '[email protected]', 'blah'); 
7FA608240FA2DC04F15DB2CDB58C83F4ED6C28C5C5B4063C5A7605F9D69F170B 

的Python:

In [12]: get_sign('blah', 1234, 456, "foo", '123.45', 
        'http://example.com', '[email protected]') 
Out[12]: '7FA608240FA2DC04F15DB2CDB58C83F4ED6C28C5C5B4063C5A7605F9D69F170B' 
+0

謝謝,我似乎可以使用正常的字符串,結果是一樣的。 – Bruce

+0

@布魯斯:不,你還沒有明白。在這裏玩這裏沒有其他類型的「正常」字符串。 – hop