Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Binary file
#1
Hi, I have been given a file and was told it was a binary file.

In Python I can open the file and read what I think is for four bytes (4).

byte = f.read(4)
print(byte)

In the shell I get

b'B\xda\xed\xc5' for example

I would like to get this in the form of something like 00001111 10100000 10101010 10100000
Without the spaces or able to remove the spaces.

So that I can convert it into int32.

(I was hoping to put up a screen capture, however I cannot see a way to do so).

Hope some one can help, there may be a better way to go about this.

Thanks,
Reply
#2
The bytes type is already an array of integers in the range(0, 256).
>>> x = b'B\xda\xed\xc5'
>>> list(x)
[66, 218, 237, 197]
For the conversion to 32 bits integer, you could have a look into the struct module
>>> import struct
>>> x = b'B\xda\xed\xc5'
>>> struct.unpack('i', x)
(-974267838,)
>>> struct.unpack('<i', x)
(-974267838,)
>>> struct.unpack('>i', x)
(1121643973,)
Reply
#3
(Aug-28-2020, 11:11 AM)Gribouillis Wrote: The bytes type is already an array of integers in the range(0, 256).
>>> x = b'B\xda\xed\xc5'
>>> list(x)
[66, 218, 237, 197]
For the conversion to 32 bits integer, you could have a look into the struct module
>>> import struct
>>> x = b'B\xda\xed\xc5'
>>> struct.unpack('i', x)
(-974267838,)
>>> struct.unpack('<i', x)
(-974267838,)
>>> struct.unpack('>i', x)
(1121643973,)

Thanks Gribouillis, I have changed the code a little to get unsigned values.
temp = struct.unpack('I', byte)
print(temp)
I am not getting the value's expected.
Is this because of LSB and / or MSB.
I don't understand how to implement in the unpack function.
Thanks,
Reply
#4
What 32 bit value do you expect for your input data (b'B\xda\xed\xc5')?
Reply
#5
Hi,

for 01011111 00011000 01100101 00111010, I would expect 1595434298
(Do I need to get the spaces out)

Thanks,
Reply
#6
I thought you were starting with b'B\xda\xed\xc5'. That doesn't yield those binary strings.

If you're starting with 01011111 00011000 01100101 00111010, then yes you can just smash them together.

>>> binary_string = "01011111 00011000 01100101 00111010"
>>> int(binary_string.replace(" ", ""), 2)
1595434298
Reply
#7
How do I get "byte = f.read(4)" into "binary_string"?
Thanks,
Reply
#8
You said you wanted to convert from 01011111...., so I assumed you already had that value.

If instead you start from the f.read(4), then you go as above and either use unpack as Gribouillis showed or do the math yourself by adding and multiplying.

>>> f = open("/tmp/num", "rb")
>>> byte = f.read(4)
>>> print(byte)
b'B\xda\xed\xc5'
>>> struct.unpack('>i', byte)
(1121643973,)
>>> ((byte[0] * 256 + byte[1]) * 256 + byte[2]) * 256 + byte[3]
1121643973
Reply
#9
Hi, how do I convert byte into a binary string or int32 of same format?
01011111000110000110010100111010
Thanks,
Reply
#10
Hi, the reason why is that I want to use
Epoch

Time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int32))

Thanks,
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How do I read and write a binary file in Python? blackears 6 6,003 Jun-06-2023, 06:37 PM
Last Post: rajeshgk
  Hashing an address for binary file Python_help 8 2,565 Nov-04-2021, 06:23 AM
Last Post: ndc85430
  Read/Write binary file deanhystad 3 3,092 Feb-01-2021, 10:29 AM
Last Post: Larz60+
  Binary File Error SalsaBeanDip 1 1,724 Oct-12-2020, 09:13 PM
Last Post: bowlofred
  Convert file of hex strings to binary file medatib531 4 13,567 Oct-09-2020, 05:42 PM
Last Post: DeaD_EyE
  Binary File Read Aussie 6 8,220 Sep-03-2020, 03:57 AM
Last Post: deanhystad
  python read binary file Pyguys 4 3,790 Jul-13-2020, 02:34 AM
Last Post: Pyguys
  Failure in writing binary text to file Gigux 7 3,716 Jul-04-2020, 08:41 AM
Last Post: Gigux
  search binary file and list all founded keyword offset Pyguys 4 2,697 Mar-17-2020, 06:46 AM
Last Post: Pyguys
  hex file to binary or pcap to binary baran01 1 5,629 Dec-11-2019, 10:19 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020