如何在正常字符串中保留ASCII值?

时间:2018-03-30 08:33:58

标签: python

我正在努力将整数值转换为高/低消息,如下所示:

def int2message(integer):
    messageHigh=chr(integer//256)
    messageLow=chr(integer%256)
    return [str(messageHigh),str(messageLow)]

以下是示例:

>>testValue=int2message(10)
>>print(testValue)
['\x00', '\n']

现在,我想将此结果附加到列表的末尾,如下所示:

['0xA2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '00', '0n']
                                                        |     |
                                                       high  low

但我发现将ASCII值保存为普通字符串很困难。我无法使用replace()删除\x\以及普通字符串的其他操作。

当我分别打印\x00\n时,它们是不可见的。

有什么好主意可以解决这个问题吗? 是否有更好的格式将整数值转换为普通字符串?

2 个答案:

答案 0 :(得分:1)

假设您使用的是ASCII或其8bit衍生产品之一(为了能够打印低于256的所有代码点),您必须知道:

  • 32以下的所有代码点都是控制字符。具体来说,'\x00'是空字符,'\x0a'(或'\n')是LineFeed
  • 字符'\x20'(32)是空格字符
  • 只有33('!')和126('~')之间的代码点是正常的可打印ASCII字符
  • 字符127是DEL(不可打印)字符
  • 字符从128到255具有不同的表示形式,具体取决于字符集。例如,'\xe9'在Latin1字符集中打印为é,在CP850字符集中打印为'Ú'

换句话说,您可以将任何低于256的值存储在字符(或Python 3中的字节)中,但不能直接打印它们。如果要打印它们,请将其转换为带有hex的hexa或带有str的十进制值字符串。

答案 1 :(得分:0)

部分答案,我担心因为我不清楚你想要输出什么。十进制数10给出ASCII字符\ n(这是一个换行符)。我假设当你将它转换为字符串时,你需要一个不可见的换行符(而不是任何实际的字符输出)。进行以下调整将为您提供。

def int2message(integer):
    messageHigh=chr(integer//256)
    messageLow=chr(integer%256)
    return [str(messageHigh),str(messageLow)]


testValue=int2message(10)
testValue = bytearray(testValue)
print(testValue)

输出只是一个空格,后跟换行符(因此光标移动但不输出文本)。