Endian là gì

Bài viết gốc: https://manhhomienbienthuy.bitbucket.io/2018/Sep/20/little-endian-vs-big-endian.html (đã xin phxay người sáng tác

*
)

Little endian cùng big endian, đây là nhì cách làm khác biệt để tàng trữ tài liệu dạng nhị phân (binary). Bình thường thì bọn họ cũng chẳng đề nghị quan tâm mang lại chúng làm những gì. Bởi đầy đủ Việc sẽ được auto hoá không còn.

Bạn đang xem: Endian là gì

Thế mà lại có những tình huống, ví dụ lúc đề xuất xử lý các tập tin bao gồm cấu tạo, tập tin binary, độc nhất vô nhị là phần lớn tập tin được ghi bằng ngôn từ không giống, thì việc gọi về little endian với big endian là siêu đặc biệt quan trọng. Bởi nếu như không, hết sức rất có thể bọn họ sẽ gọi không đúng sản phẩm từ cùng giải pháp xử lý cùng với tài liệu được gọi không nên.

Dữ liệu

Dữ liệu là biểu đạt của công bố dưới dạng tàng trữ được. Thông tin là sản phẩm công nghệ trừu tượng, không có bản thiết kế, đó là phần đông đọc biết về những sự trang bị, vấn đề xung quanh bọn họ. Để tàng trữ, cũng tương tự truyền đạt biết tin đến những bạn, họ nên mang lại tài liệu. Dữ liệu có thể là chữ viết, hình hình họa được ghi trên chứng từ, toàn bộ chúng ta tài liệu cơ mà con người hoàn toàn có thể đọc được.

Nhưng gần như dữ liệu kia cần phải được mã hoá một lần nữa, giả dụ họ mong lưu trữ bọn chúng bên trên máy vi tính. Nhỏng họ hầu như biết, máy vi tính chỉ thao tác làm việc cùng với dữ liệu được mã hoá bên dưới dạng nhị phân, vậy đề nghị hầu như dữ liệu cần phải mã hoá thành nhị phân new hoàn toàn có thể giải pháp xử lý bên trên máy vi tính được.

Thực ra vấn đề này chỉ đúng cùng với máy tính số (digital electronic computer). Nghe nói bây giờ máy tính xách tay lượng tử, máy tính sinh học cũng đang được cải cách và phát triển, hi vọng trong vài năm cho tới, bọn họ vẫn update lại kỹ năng và kiến thức về dữ liệu.

Thực ra, máy tính xách tay không hiểu được những cam kết tự 0, một trong các hệ nhị phân đâu, nó vận động theo những biểu hiện năng lượng điện tử. Mô tả đúng đắn thì khôn xiết khó khăn, mà lại chúng ta có thể đọc "sơ sơ" rằng, chạm mặt bit 1 thì sẽ có được chiếc diện, gặp gỡ bit 0 thì không có. Như vậy, những bit 0, 1 được giải pháp xử lý thành những bộc lộ điện tử khớp ứng, với bọn họ coi đó nhỏng máy vi tính đang đọc được dữ liệu nhị phân.

Thế nhưng, tuy nhiên thuộc sử dụng biểu thị dạng nhị phân, những máy vi tính khác biệt cũng không thực thụ nói tầm thường một ngôn ngữ. Cũng y hệt như coi người vậy, Lúc quan sát những ký từ a, b, c gồm người đọc, tất cả bạn không. Máy tính lúc chú ý vào những tín hiệu tương ứng cùng với những cam kết hiệu 0 hay như là một, mỗi máy tính có thể đọc theo một biện pháp khác nhau.

Thế nhưng lại, siêu may là các máy vi tính vẫn chuyển động theo đều tiêu chuẩn chỉnh phổ biến, thế nên nó vẫn hoàn toàn có thể giao tiếp cùng nhau được. Tuy nhiên, xem xét rằng, chưa hẳn bất cứ lúc làm sao, những laptop cũng hoàn toàn có thể gọi được cho nhau.

Trong máy tính, các tài liệu nhị phân không được xử lý theo từng bit riêng lẻ, mà được giải pháp xử lý thành từng khối 8 bit một, với đơn vị giải pháp xử lý nhỏ dại tuyệt nhất này Call là byte.

ví dụ như, số nguyên ổn 123456789 được màn biểu diễn bên dưới dạng nhị phân vẫn là (ở đây tôi cho rằng mẫu mã tài liệu int sẽ sở hữu được size là 4 byte, tuy nhiên, các khối hệ thống 64 bit đang nâng form size này lên 8 byte)

00000111 01011011 11001101 00010101Để ngắn thêm gọn, bạn có thể viết nó dưới dạng hexa như sau:

07 5b cd 15Đã bao gồm bao giờ, các bạn từ bỏ hỏi, khi ghi dữ liệu này trên đĩa cứng chẳng hạn, nó được ghi ráng làm sao chưa. Quý khách hàng cho rằng, nó sẽ tiến hành ghi theo lần lượt theo sản phẩm từ bỏ nhưng chúng ta đang hiểu với viết sống trên, thì bạn đang nhầm.

Đây là giải pháp viết theo phong cách số Ả rập mang đến họ dễ dàng nắm bắt thôi, laptop ko "đọc" những ký kết tự y hệt như chúng ta nên nó cũng không lưu trữ giống phương pháp chúng ta viết các cam kết từ này ra đâu. Việc ghi dữ liệu thế nào chính là thời gian little endian với big endian được sử dụng đến.

Little endian cùng big endian là gì?

Little endian cùng big endian là nhì cách làm không giống nhau nhằm lưu trữ tài liệu. Sự khác biệt của little endian với big endian Khi tàng trữ chính là sinh hoạt bài toán bố trí lắp thêm từ bỏ các byte dữ liệu.

Trong phép tắc tàng trữ little endian (xuất phát từ "little-end" nghĩa xong nhỏ hơn), byte sau cùng vào trình diễn nhị phân bên trên sẽ tiến hành ghi trước. Ví dụ 123456789 ghi theo phong cách little endian đang thành

15 cd 5b 07Hơi ngược một chút ít đúng không? Big endian (bắt đầu từ "big-end") thì ngược chở lại, là cách thức ghi tài liệu theo sản phẩm tự bình thường mà lại chúng ta vẫn sử dụng. 123456789 được lưu trữ vẫn theo như đúng đồ vật từ bỏ là

07 5b cd 15Các thuật ngữ big-over hay little-end bắt đầu từ cuốn đái tmáu Gulliver du ký (Gulliver"s Travels), trong những số ấy nhân đồ vật Lilliputans tranh luận về câu hỏi nên đập trứng bởi đầu khổng lồ giỏi nhỏ.

Và ngành IT sẽ vận dụng thuật ngữ ngày, tương đối giống với nghĩa nơi bắt đầu. Lưu ý rằng, little endian hay big endian chỉ không giống nhau sinh hoạt phương pháp bố trí các byte dữ liệu, còn thứ tự từng bit trong byte thì như thể nhau. Rất may, các máy tính xách tay vẫn đang còn điểm trung này.

Thêm một lưu ý nữa rằng, little endian giỏi big endian chỉ biệt lập lúc phải lưu trữ đều tài liệu có khá nhiều byte. Những dữ liệu chỉ có 1 byte (ví dụ ký kết trường đoản cú ASCII) thì không tác động gì (chính xác là dù dùng cách thức nào hiệu quả cũng như nhau)

Little endian với big endian được dùng bên trên phần lớn máy tính xách tay nào?

Việc bố trí các byte dữ liệu theo phong cách little endian tốt big endian không chỉ có xảy ra khi chúng ta lưu trữ dữ liệu ra bộ nhớ ngoại trừ. Mọi buổi giao lưu của laptop phần lớn sử dụng dữ liệu nhị phân, đề nghị little endian/big endian hiện hữu vào số đông buổi giao lưu của máy tính.

Ngoài việc thực hiện little endian/big endian một phần phụ thuộc vào vào phần mềm (bởi lập trình sẵn viên cố kỉnh ý áp dụng một trong nhị nhiều loại, hoặc ngôn ngữ lập trình sẵn chính sách trước), nó còn phụ thuộc vào cỗ vi xử trí của thiết yếu máy tính xách tay kia.

Các bộ vi xử lý Hãng sản xuất Intel đông đảo thực hiện little endian, những cỗ vi cách xử lý cả ARM trước đó cũng là little endian, tuy vậy hiện này ARM vẫn nâng cấp vi cách xử trí của mình thành bi-endian (Tức là cách xử trí cả little endian cùng big endian).

Các bộ vi giải pháp xử lý PowerPC và SPARK trước đây phần nhiều là big endian, cơ mà bây giờ chúng cũng khá được tăng cấp thành bi-endian.

Các làm làm sao thì tốt hơn: little endian xuất xắc big endian?

Little endian hay big endian cũng giống như tranh luận nơi bắt đầu về Việc đập trứng, không tồn tại một thủ tục như thế nào thực sự tốt hơn thủ tục làm sao.

Little endian tốt big endian chỉ khác biệt nghỉ ngơi bài toán lưu trữ máy từ bỏ những byte tài liệu. Cả nhì cách làm gần như không có tác dụng ảnh hưởng đến tốc độ xử lý của CPU. Thế yêu cầu cả nhì phương thức đông đảo vẫn mãi sau tuy vậy song và sẽ không còn bao giờ hoàn toàn có thể có một câu vấn đáp thoả đáng: Phương thức làm sao thì giỏi hơn?

Mỗi cách tiến hành đều sở hữu đều lợi thế nhất quyết. Với little endian, vì byte bé dại tốt nhất luôn nằm bên cạnh trái, nó vẫn có thể chấp nhận được họ hiểu dữ liệu cùng với độ lâu năm tuỳ ý. Nó sẽ rất thích hợp ví như bọn họ buộc phải ép hình dạng, ví dụ từ int thành long int.

Với trả định int là 4 byte, long int là 8 byte, nếu dùng little endian, lúc ép giao diện, tác động bộ lưu trữ không cần thiết phải biến hóa, bọn họ chỉ cần ghi tiếp những byte lớn hơn cơ mà thôi.

Nhưng giả dụ cũng ngôi trường thích hợp kia, nhưng thực hiện big endian, thì chúng ta vẫn đề nghị dịch ảnh hưởng bộ nhớ bây giờ thêm 4 byte nữa mới tất cả không gian nhằm lưu trữ.

Nhưng big endian cũng đều có tuy thế lợi thế nhất thiết, với việc gọi dữ liệu byte lớn số 1 trước, nó sẽ rất thuận tiện soát sổ một trong những là âm tốt dương, vì byte chứa vệt được hiểu trước tiên.

Xem các byte dữ liệu trong bộ nhớ

Chương trình C đơn giản dễ dàng nhau mang lại họ cách nhìn về Việc bố trí những byte vào bộ nhớ lưu trữ.

Xem thêm: #1 Cit Là Gì? Cit Là Thuế Gì Và Những Điều Bạn Cần Biết Tìm Hiểu Về Thuế Thu Nhập Doanh Nghiệp

#include /* function to lớn show bytes in memory, from location start khổng lồ start+n */voidshow_mem_rep (char *start, int n) int i; for (i = 0; i n; i++) printf (" %.2x", start); printf (" ");/* Main function lớn Gọi above function for 0x01234567 */intmain () int i = 0x01234567; show_mem_rep ((char *) &i, sizeof (i)); return 0;khi thực thi lịch trình bên trên, ví như vật dụng của chúng ta là little endian thì công dụng sẽ là

67 45 23 01còn nếu như đồ vật các bạn là big endian thì nó sẽ hiển thị theo máy từ thông thường

01 23 45 67Có giải pháp làm sao nhằm xác định máy vi tính của họ là little endian tốt big endian xuất xắc không? Có vô số các cách không giống nhau, dưới đây là một trong những các cách đó:

#include intmain () unsigned int i = 1; char *c = (char *) &i; if (*c) printf ("Little endian"); else printf ("Big endian"); return 0;Với đoạn code dễ dàng và đơn giản trên, c là bé trỏ, nó trỏ đến vùng ghi nhớ của vươn lên là i là một số nguyên. Bởi do số nguyên là mẫu mã dữ liệu các byte, vào khí dữ liệu của char chỉ là một trong byte mà thôi, buộc phải *c sẽ trả về quý giá là byte đầu tiên của số ngulặng i.

Nếu laptop của bọn họ là little endian thì byte đầu tiên này đang là 1 trong những, ngược trở lại thì nó đang là 0.

Như vậy ảnh hưởng cầm làm sao tới sự việc lập trình

Về cơ phiên bản thì little endian xuất xắc big endian không tồn tại tác động lắm tới sự việc lập trình. Phần to các lập trình sẵn viên không đề nghị quyên tâm nhiều lắm, bởi vì đa số Việc đã được những trình biên dịch/thông dich phụ trách hết.

Tuy nhiên, một vài trường hòa hợp, chúng ta đề xuất quan tâm, đặc trưng khi đổi khác dữ liệu giữa những laptop không giống nhau. Ví dụ: Khi họ phải xử lý một file tất cả cấu trúc nỗ lực này, 4 byte trước tiên là một vài nguyên ổn n, tiếp đến là n số ngulặng, từng số chiếm 4 byte bộ lưu trữ, v.v...

Trong ngôi trường thích hợp này, lúc thừa nhận file được tạo thành xuất phát từ 1 máy tính khác, vấn đề nó được ghi theo kiểu little endian tuyệt big endian ví dụ là ảnh hưởng rất nghiêm trọng, nếu như sử dụng sai thủ tục, bọn họ sẽ tiếp thu tài liệu sai.

Một ngôi trường hợp khác nữa có thể xảy ra sự việc là lúc bọn họ ép hình dáng cho các biến

#include intmain () unsigned char arr<2> = 0x01, 0x00 ; unsigned short int x = *(unsigned short int *) arr; printf ("%d", x); return 0;Trong đoạn code bên trên, chúng ta đã nghiền hình dạng một array nhì bộ phận char thành một số ngulặng 2 byte (short int). Trong ví dụ này, little endian giỏi big endian cũng có ảnh hưởng không hề nhỏ.

Một máy tính xách tay dùng little endian sẽ sở hữu kết quả là một trong những trong những lúc big endian vẫn mang đến hiệu quả là 256. Để tránh hầu hết lỗi không mong muốn hoàn toàn có thể xẩy ra, hầu như code như trên rất cần được tránh.

Vấn đề NUXI

NUXI là một trong vụ việc cực kỳ khét tiếng liên quan mang đến little endian với big endian: UNIX được giữ vào một khối hệ thống big-endian sẽ được đọc là NUXI vào một khối hệ thống little endian.

Giả sử chúng ta buộc phải tàng trữ 4 byte (U, N, I, X) bởi nhì số nguyên ổn dạng short int: UN và IX.

#include intmain () short int *s; // pointer to lớn phối shorts s = (short int *)malloc(sizeof(short int)); // point to lớn location 0 *s = "UN"; // store first short: U * 256 + N (fictional code) s += 2; // point to lớn next location *s = "IX"; // store second short: I * 256 + X return 0;Đoạn code trên hoàn toàn độc lập cùng với hệ thống, bất kỳ nó là little tốt big endian. Nếu chúng ta lưu trữ các quý giá "UN" cùng "IX" lúc gọi ra, nó vẫn sẽ là "UNIX" hay không? Nếu phần nhiều bài toán chỉ xảy ra bên trên một máy vi tính, mặc dù là big endian tốt little endian thì nó sẽ luôn là những điều đó, do số đông thiết bị sẽ được tự động hoá góp bọn họ.

Với bất cứ dữ liệu nào thì cũng vậy, bọn họ luôn nhận được tài liệu đúng nếu hiểu và ghi trong cùng một khối hệ thống. Thế dẫu vậy, hãy xem xét kỹ hơn về việc thu xếp những byte vào bộ lưu trữ.

Một khối hệ thống big endian đang tàng trữ như sau:

U N I XCòn một hệ thống little endian thì đã như sau:

N U X IMặc cho dù trông khá ngược dẫu vậy hệ thống little endian sẽ xử trí bài toán hiểu góp bọn họ, buộc phải lưu trữ điều đó mà lại khi lôi ra chúng ta vẫn có dữ liệu ban đầu. Thế cơ mà lúc chúng ta ghi dữ liệu này ra tệp tin, gửi qua 1 máy vi tính khác. Và mỗi máy tính xách tay lại giải pháp xử lý theo cách riêng rẽ của nó thì UNIX bên trên đồ vật big endian sẽ tiến hành hiểu là NUXI bên trên lắp thêm little endian (với ngược lại).

Đây chính là vấn hầu hết gian nguy nhất khi chúng ta trao đỏi tài liệu tương hỗ giữa các laptop cùng nhau, đặc trưng trong thời đại Internet ngày này.

Trao thay đổi tài liệu thân những vật dụng bao gồm endian không giống nhau

Ngày ni, đa số laptop số đông được liên kết để trao đổi tài liệu cùng nhau. Little endian tốt big endian cũng hồ hết phải điều đình cùng nhau, mà lại làm cho cầm cố như thế nào để có gọi được nhau Khi bọn chúng ko nói bình thường một đồ vật tiếng?

Có 2 phương án chủ yếu mang đến Việc này

Sử dụng thông thường định dạng

Một phương pháp dễ dàng tuyệt nhất toàn bộ áp dụng thông thường một định dang Lúc truyền tài liệu.

ví dụ như những tập tin dạng PNG rất nhiều cần phải áp dụng big endian. Tương tự cùng với các tập tin bao gồm kết cấu khác. Đó là lý do vày sao họ đôi khi rất cần được dùng phần đông ứng dụng chuyên được dùng để hiểu và ghi những file này.

Thế cơ mà trong liên kết với Internet, câu hỏi truyền tài liệu còn tinh vi không những thế. Chúng ta chẳng thể cđọng dùng một định hình tệp tin làm sao kia, rồi truyền từng byte một lịch sự thiết bị không giống được. Muốn nắn tăng tốc độ, buộc phải bọn họ cần truyền nhiều byte một lúc.

Và khi đó bọn họ cần phải có một chuẩn chỉnh bình thường. Lúc này, chuẩn chỉnh thông thường đến bài toán truyền tài liệu trên mạng, Hotline là network byte order chính là big endian. Thế nhưng, cho dù sẽ chuẩn bình thường rồi, thỉnh thoảng vẫn có đông đảo giao thức đùa chội rộng, áp dụng little endian.

Để hoàn toàn có thể biến hóa tài liệu thành tài liệu chuẩn chỉnh theo network byte order, lịch trình phải call hàm hton* (host-to-network) (trong ngôn từ C). Trong hệ thống big endian, hàm này không nên làm cái gi cả, còn little endian vẫn tiến hành chuyển đối những byte một ít.

Dù hệ thống big endian ko buộc phải biến hóa dữ liệu, bài toán Điện thoại tư vấn hàm này vẫn luôn là khôn cùng cần thiết. Chương thơm trình của bạn có thể được viết bởi một ngôn ngữ (C) tuy nhiên rất có thể được dịch cùng tiến hành sinh sống nhiều hệ thống khác biệt, câu hỏi điện thoại tư vấn hàm này để giúp bọn họ có tác dụng điều đó.

Tương từ bỏ, làm việc chiều ngược trở lại, họ nên Hotline hàm ntoh* để biến hóa dữ liệu cảm nhận tự mạng về dữ liệu máy tính hoàn toàn có thể hiểu được. Dường như, bọn họ còn phải hiểu rõ giao diện dữ liệu nhưng bọn họ bắt buộc biến hóa nữa, danh sách những hàm đổi khác nhỏng sau:

htons - "Host lớn Network Short"htonl- "Host to Network Long"ntohs - "Network to lớn Host Short"ntohl - "Network to Host Long"

Những hàm này cực kỳ quan trọng lúc triển khai chia sẽ tài liệu trên tầng phải chăng, ví dụ Lúc bình chọn checksum của những gói tin chẳng hạn. Nếu không nắm rõ về little endian với big endian thì khi đề nghị thao tác làm việc về mạng, các bạn sẽ gặp nhiều khó khăn.

Sử dụng BOM (Byte Order Mark)

Một cách thực hiện không giống để giải quyết sự khác hoàn toàn về endian là áp dụng BOM (Byte Order Mark). Đây là 1 trong ký kết từ đặc trưng, có giá trị là 0xFEFF, được ghi tại phần trước tiên của tệp tin.

Nếu độc giả cam kết trường đoản cú này là 0xFFFE (bị ngược) thì bao gồm nghĩa tệp tin này được ghi với endian không giống cùng với khối hệ thống của chúng ta, khi ấy, các bạn sẽ rất cần được biến hóa cách tiến hành đọc tài liệu một chút ít.

Có một vài ba vấn đề nhỏ tuổi với vấn đề thực hiện BOM. Thứ duy nhất, BOM sẽ gây ra tăng dữ liệu được ghi vào tệp tin. Ngay cả Lúc bọn họ chỉ gửi đi 2 byte dữ liệu, bọn họ vẫn đề xuất thêm 2 byte BOM nữa.

Xem thêm: Cách "Hack" Wifi Chùa - Cgv Cinemas Hoàng Văn Thụ

Thđọng nhì, BOM ko hoàn toàn thần thánh, bởi vì nó nhờ vào vào xây dựng viên. Có người có chổ chính giữa thì phát âm và giải pháp xử lý lúc gặp mặt BOM, bao gồm bạn thì trọn vẹn xem nhẹ nó với coi nói nlỗi dữ liệu thông thường. Unicode sử dụng BOM khi tàng trữ tài liệu các byte (các ký từ Unicode được mã hoá thành 2, 3 thậm chí còn là 4 byte).


Chuyên mục: Công Nghệ