Việc tách các byte ra có ý nghĩa gì?

Cho e hỏi việc tách các byte ra có ý nghĩa gì vậy ạ

Byte là vùng nhớ nhỏ nhất có thể có địa chỉ (addressable) :smiley:

Bài này thực ra khoe cái endian tí :smiley: x86 thì nó vậy, nếu là ARM thì xếp không giống đâu.

6 Likes

Ý em là việc chúng ta tách các byte ra có ý nghĩa gì và áp dụng làm gì đc ạ

Mấy môn sau bạn sẽ rõ ví dụ này.

7 Likes

Dễ hình dung nhất là để lưu trữ thông tin.
Gói (pack) 4 biến 8 bytes vào 1 biến 32 bytes sẽ ít tốn kém lưu trữ hơn lưu vào 4 biến 32 bytes.

6 Likes

nó chả có y nghĩa gì cả. bạn dùng kiểu union ghi dạng unsigned long 4 byte nhưng đọc dạng char[4] nên máy no hiểu vậy thôi. ví dụ như từ MAN mình đọc là “man” nhưng tây đọc là “men” vậy đó.

3 Likes

Để truy cập được từng byte trong một dữ liệu lớn.
Cụ thể hơn là để xử lý, truy cập đơn lẻ từng byte một cách dễ dàng.
Cụ thể hơn nữa. Giờ tôi có một số long u có 4 byte. Tôi muốn tách 4 byte ra đẩy đi 4 nơi khác để xử lý. Nếu không sử dụng union, tôi phải thực hiện các phép dịch bit hoặc con trỏ mới lấy được riêng 4 byte ra.

5 Likes

Câu hỏi cũng giống như: tại sao ngoài đơn vị mét (m), phải thêm tiền tố để có thêm có đơn vị độ dài khác là km, mm, um, nm. Ngoài ra còn có đơn vị ngoài SI: dặm, Hải lý, năm ánh sáng, amstrong,…

6 Likes

Tách ra vì trước đó nó được ghép vào. Ý đồ của người thiết kế cấu trúc dữ liệu thôi, họ ghép vào để tận dụng khoảng trống. Khi cần đọc thì tách ra lại.

3 Likes

cách này chỉ đúng cho C thôi nha, C++ thì ko đúng :V

muốn cast thành bytes thì C++ xài reinterpret_cast<unsigned char*>(&u)

nếu muốn code cho C và C++ thì cứ tạo mảng bytes[sizeof u] rồi memcpy(bytes, &u, sizeof u) là được. Trình dịch sẽ tự động tối ưu code này, ko tạo ra mảng bytes tạm mà xài thẳng u là mảng uchar luôn :V

nguồn :V https://gist.github.com/shafik/848ae25ee209f698763cffee272a58f8

5 Likes

Hên xui nó cùng kiểu thì chơi được. Còn không thì cũng vẫn union ::))
Nếu ai làm về VĐK sẽ thấy union này nó khá hữu ích. Không phải là có tách được không mà nó sẽ tường minh.

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