2

I have an external app that appends the length of the packet at the start of the data. Something like the following code:

x = "ABCDE"
x_len = len(x)
y = "GHIJK"
y_len = len(y)
test_string = chr(x_len) + x + chr(y_len) + y
#TODO:perform base64 encoding

In the client side of the code I need to be able to extract x_len and y_len and read x and y accrodingly.

#TODO:perform base64 decoding
x_len = int(test_string[0])
x = test_string[:x_len]

I get the following error: ValueError: invalid literal for int() with base 10: '\x05'

I assume the argument of int is in hex so I probbaly need to do some decoding before passing to the int. Can someone give me a pointer as to what function to use from decode or if there is any easier way to accomplish this?

1

2 Answers 2

9

You probably want ord(), not int(), since ord() is the opposite operation from chr().

Note that your code will only work for lengths up to 255 since that is the maximum chr() and ord() support.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks! Is ord() available in 2.6?
2
t="ABCDE"

print reduce(lambda x,y:x+y,[ord(i) for i in t])

#output 335

usage of ord: it is used to convert character to its ascii values ..

in some cases only for alphabets they consider A :1 --- Z:26 in such cases use

ord('A')-64 results 1 since we know ord('A') is 65

1 Comment

The alphabet solution is useful. And if they consider A as 0 to Z as 25 you can - 65 istead.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.