I am trying to rewrite the following PHP code in Python but am not sure how to do it. My experience with bytes, hexadecimal and binary is almost none and I am finding this to be very confusing.
$code_string = "0000000000000248";
$code_array = array();
$tokens = str_split($code_array, 2);
foreach ($tokens as $token) {
$byte = hexdec($token);
array_push($code_array, $byte);
}
$code_blob = pack("C*",
$code_array[0],
$code_array[1],
$code_array[2],
$code_array[3],
$code_array[4],
$code_array[5],
$code_array[6],
$code_array[7]
);
$sql = "INSERT INTO some_table (code) VALUES ($code_blob)"
The "code" field is a MySQL binary(8) type. When the above code is ran in PHP the code is insert with no issues. In phpMyAdmin when I look at the record it is represented as "0000000000000248".
I'm not sure if this is helpful information but when i print the tokens one by one they look like this
foreach ($tokens as $token) {
$byte = hexdec($token);
array_push($code_array, $byte);
echo "$byte ";
}
// looks like 0 0 0 0 0 0 2 72
When I print the SQL it looks like this
INSERT INTO some_table (code) VALUES ('H')
I have no idea how to do this in Python (3.4)
Thanks to tmadam for the correct answer. Just as a note, to insert it into the database you must do it like this
sql = "INSERT INTO some_table (code) VALUES (%s)"
cursor.execute(sql, (code_blob,))
db.commit()
If you put the blob directly into the string in Python the string will look like b'...' and break the SQL.
In your PHP code you make an array of decimals from $code_string
with the hexdec
function, then use this array to make a string of chars with the pack
function .
Python equivalent :
from struct import pack
code_string = '0000000000000248'
code_array = [ int(code_string[i:i+2], 16) for i in range(0, len(code_string), 2) ]
code_blob = pack('B'*len(code_array), *code_array)
#code_blob = ''.join( chr(i) for i in code_array ) ## pack alternative ##
Result :
print(code_array)
print(code_blob)
[0, 0, 0, 0, 0, 0, 2, 72]
' ☻H'
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.