Insert '\x' in python3 [duplicate] - python

This question already has answers here:
How to convert hexadecimal string to bytes in Python?
(7 answers)
Closed 11 months ago.
I am trying to use crcmod correctly but I have problem:
For example I would like to transform the string "1234567809" into the bytes b'\x12\x34\x56\x78\x09' in order to obtain the correct crc16 modbus code.
import crcmod
crc16 = crcmod.mkCrcFun(0x18005, rev=True, initCrc=0xffff)
for i in range(len(a)//2):
a = a[:(i*4)] + r"\x" + a[i*4:]
The problem is that r"\x" inserts '\\x', not '\x',
and of course '\x' returns an error.
a.encode("utf-8")
of course returns b'\\x12\\x34\\x56\\x78\\x09'.
That is the result with \\x:
hex(crc16(a.encode("utf-8")))
'0x68b7'
That is the result I expected:
hex(crc16(b'\x12\x34\x56\x78\x09'))
'0x2590'

You can directly convert a string: '1234567809' to the bytes you want:
source = '1234567809'
a = bytes.fromhex(source)
Now the crc should work:
hex(crc16(a))

Related

How to reverse the float.hex() method in Python [duplicate]

This question already has answers here:
Converting hex string representation to float in python
(2 answers)
Closed 2 years ago.
Is there a way to reverse the hex() method of a float in Python? For example,
n = 1280.03125
n_hex = n.hex()
print(n_hex) # result--> 0x1.4002000000000p+10
How can I convert 0x1.4002000000000p+10 back to 1280.03125? I know you can use int(num, base) to convert a number to integer but it doesn't support decimal.
Try float.fromhex(str):
>>> float.fromhex("0x1.4002000000000p+10")
1280.03125

Convert a signed long to ASCII binarized hexidecimal format python [duplicate]

This question already has answers here:
Why does "bytes(n)" create a length n byte string instead of converting n to a binary representation?
(16 answers)
Closed 2 years ago.
Given a 8-bytes long signed value, like 3576757170468630901, I would like to convert it to ASCII binarized hexadecimal:
For example:
>> hex(3576757170468630901).encode('ascii')
b'0x31a331b2319d3175'
What I am looking for is the following format:
b'\x31\xa3\x31\xb2\x31\x9d\x31\x75'
I am not sure how can I generate it? Should I break each block and convert it myself?
In python 3 there is now to_bytes() which may help here:
v = 3576757170468630901
print(hex(v))
print(v.to_bytes(8, 'big'))
Output:
0x31a331b2319d3175
b'1\xa31\xb21\x9d1u'

Python - How do I convert number with dash to number [duplicate]

This question already has answers here:
Python: Converting string into decimal number
(8 answers)
Closed 4 years ago.
I have a number 3.8148116e-09
How do I convert it to a real number without the - ?
Thanks.
You can try:
>>> a = "3.8148116e-09"
>>> number = float(a)
>>> print "{:1.16f}".format(number)
0.0000000038148116
The first line parses the string as a number. If you need to print the number or format it for another reason, you can use string#format.

how to convert number < 1 from string to float python [duplicate]

This question already has answers here:
How can I convert a string with dot and comma into a float in Python
(9 answers)
Closed 4 years ago.
my question is simple.
I got my string :
a = '0,0127'
I want to convert it to a number but when i compile
float(a)
i got the following message error :
ValueError: could not convert string to float: '0,0127'
Is there another way to convert it to a number ?
Using str.replace
Ex:
a = '0,0127'
print(float(a.replace(",", ".")))
Output:
0.0127
The reason this isn't working is because the decimal type only recognizes periods (.) for the decimal delimiter as this is what is common in, e.g., english. You could manually change the string or do
a = a.replace(",", ".")
float(a)
Which should work.

How to convert int to 4 byte hex [duplicate]

This question already has an answer here:
Converting a value into 4 byte hex in python
(1 answer)
Closed 6 years ago.
I need to convert an unsigned integer like 4003 to its hex representation. The output of the following code
print(struct.pack("<I", 4003).encode('hex'))
is
a30f0000
How can I get the following output?
00000fa3
It's not necessary to use struct.pack. Any other approach would be appreciated.
>>> '{:08x}'.format(4003)
'00000fa3'
You can get your desired result using
print(struct.pack(">I", 4003).encode('hex'))

Categories

Resources