将ASCII字符串转换为16位值序列

0 投票
4 回答
3251 浏览
提问于 2025-04-18 02:56

我刚开始学Python,想把ASCII字符串转换成一系列16位的数值。具体来说,就是把两个连续字符的ASCII码放到一个16位数的高字节和低字节里,然后对整个字符串都这样做...

我找过类似的解决方案,但没找到。我相信对更有经验的Python程序员来说,这个任务应该很简单...

4 个回答

0

我觉得 struct模块 在这里会很有用:

>>> s = 'abcdefg'
>>> if len(s) % 2: s += '\x00'
... 
>>> map(hex, struct.unpack_from("H"*(len(s)//2), s))
['0x6261', '0x6463', '0x6665', '0x67']
>>> 
0

我现在也在解决同样的问题(同时学习Python),这是我找到的一个有效的方法——我知道这不是完美的;(不过它确实能用;)

import re

#idea - char to 16
print(format(ord("Z"), "x"))
#idea - 16 to char
print(chr(int("5a", 16)))

string = "some string! Rand0m 0ne!"
hex_string = ''
for c in string:
    hex_string = hex_string + format(ord(c), "x")

del string

print(hex_string)

string_div = re.findall('..', hex_string)
print(re.findall('..', hex_string))

string2 = ''
for c in range(0, (len(hex_string)//2)):
    string2 = string2 + chr(int(string_div[c], 16))

del hex_string
del string_div

print(string2)
0

我测试过这个,确实有效,而且也不太复杂:

string = "Hello, world!"
L = []
for i in string:
    L.append(i) # Makes L the list of characters in the string
for i in range(len(L)):
    L[i] = ord(L[i]) # Converts the characters to their ascii values
output = []
for i in range(len(L)-1):
    if i % 2 == 0:
        output.append((L[i] * 256) + L[i+1]) # Combines pairs as required

这里的“output”是一个列表,用来存放结果。

顺便说一下,你可以直接使用

ord(character)

来获取字符的 ASCII 值。

希望这对你有帮助。

0

用简单的Python代码:

s= 'Hello, World!'
codeList = list()
for c in s:
    codeList.append(ord(c))

print codeList

if len(codeList)%2 > 0:
    codeList.append(0)

finalList = list()
for d in range(0,len(codeList)-1, 2):
    finalList.append(codeList[d]*256+codeList[d+1])

print finalList

如果你使用列表推导式:

s= 'Hello, World!'
codeList = [ord(c) for c in s]    
if len(codeList)%2 > 0:    codeList.append(0)
finalList = [codeList[d]*256+codeList[d+1] for d in range(0,len(codeList)-1,2)]

print codeList
print finalList

撰写回答