Đọc ghi file nhị phân trong python 3.x

cách này

ghi 1.3 thì nó ghi str xuống, dung lượng là 3bytes, vì bản chất repr lấy 1 chuỗi biểu diễn được đại diên cho obj, nó tương tự str nhưng fully hơn

dùng struct thì ngon lành r, 4 bytes đàng hoàng, và mở file text lên nó cũng hiển thị kí tự đặc biệt

import struct
file_output = open("output.dat", "wb")
file_output.write(struct.pack(">f", 2.2))
file_output.close()

Ký tự nào trong CS cũng đặc biệt cả, không có ký tự nào xuất hiện trong ASCII/unicode table 2 lần.

Ý a là em thử implement 1 đoạn code bằng C/C++ lưu 1 string (“Hello world”) hay float (-1.2) dưới dạng binary, em sẽ hiểu vì sao mình không làm được nó ở Python.

1 Like

e lưu “Hello world” thì ra Hello world và 1 kí tự đặc biêt là ‘\n’ ở cuối
còn lưu -1.2 thì nó ra kí tự đặc biệt
e vẫn chưa hiểu ý a muốn truyền tải, a có thể giải thích rõ hơn k, e chưa rõ tại sao có sự khác biệt này

em dùng module struct thì vẫn ghi như bên c/c++

  • số bytes đúng, ví dụ 1.2 = 4 bytes chứ k phải 3 bytes
  • mở bằng notepad++ ra kí tự đặc biệt (1 số kí tự vẫn hiển thị thường)
  • chuyển ascii -> hex -> float thì giá trị đúng như khi ghi vào

Trong python .encode() method không dùng để chuyển sang binary code, theo manual thì str.encode() returns bytes representation of the unicode string,

In [24]: a = 'Nguyễn'

In [25]: a.encode()
Out[25]: b'Nguy\xe1\xbb\x85n'

In [26]: a.encode('utf-8')
Out[26]: b'Nguy\xe1\xbb\x85n'

cũng trong Python, bytes representation chỉ biểu diễn bảng ASCII, nghĩa là 0 <= bytes < 256 nên chữ biểu diễn dưới dạng hex thay vì str thuộc ASCII.

Đoạn sau anh không hiểu em nói gì cả, ký tự đặc biệt, rồi chuyển ascii… Mã máy thì ký tự nào cũng đặc biệt, không có ký tự nào đặc biệt hơn ký tự nào cả.

  1. Em đã thử implement trong C/C++ in ra Hello world dưới binary representation chưa?
  2. Nếu được rồi thì em dùng struct sẽ in ra thứ mà em muốn.
2 Likes

kí tự đặc biệt là mấy cái lèo nghòe k đọc được đó a :smile:
em đã hiểu rồi, tks anh
image

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?