简体   繁体   中英

Convert an integer into a string of its ascii values

Given a number number such that its digits are grouped into parts of length n (default value of n is 3) where each group represents some ascii value, I want to convert number into a string of those ascii characters. For example:

n                number     Output
==================================
3                    70          F
3           65066066065       ABBA
4        65006600660065       ABBA

Note that there is no leading 0 in number, so the first ascii value will not necessarily be represented with n digits.

My current code looks like this:

def number_to_string(number, n=3):
    number = str(number)
    segment = []

    while number:
        segment.append(number[:n])
        number = number[n:]

    return str(''.join('{:0>{}}'.format(chr(segment), n) for segment in number))

Expected outputs:

number_to_string(70)
'F'

number_to_string(65066066065)
'ABBA'

number_to_string(65006600660065, n=4)
'ABBA'

My current code however returns an empty string. For example, instead of 'F' it returns ' ' . Any reason why this is? Thank you!


PS:
I'm wanting to reverse the process of this question , ie turn an integer into a string based on the ascii values of each character (number) in the string. But reading that question is not a requirement to answer this one.

Try this:

import re

def number_to_string(num, n=3):
    num_str = str(num)
    if len(num_str) < n:
        num_str = '0' * (n-len(num_str)) + num_str
    elif len(num_str) % n != 0:
        num_str = '0'*(n-len(num_str)%n) + num_str
    print(num_str)

    chars = re.findall('.'*n, num_str)
    l = [chr(int(i)) for i in chars]
    return ''.join(l)

First pad the given number (converted into string) with required number of zeros, so that it can be evenly split into equal number of characters each. Then using re split the string into segments of size n . Finally convert each chunk into character using chr , and then join them using join .

def numToStr(inp):
"""Take a number and make a sequence of bytes in a string"""
out=""
while inp!=0:
    out=chr(inp & 255)+out
    inp=inp>>8
print "num2string:", out 
return out

does this help?

Is this what you want?

def num_to_string(num, leng):
    string = ""
    for i in range(0,len(str(num)),leng):
        n = str(num)[i:i+2]
        string += chr(int(n))
    print string

Output:

>>> ================================ RESTART ================================
>>> 
>>> num_to_string(650065006600,4)
AAB
>>> num_to_string(650650660,3)
AAB
>>> num_to_string(656566,2)
AAB
>>> 

您可以将\\ x附加到数字,因为这会打印'p':

print '\x70'

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM