Big Endian Là Gì

Bài viết gốc: https://manhhomienbienthuy.bitbucket.io/2018/Sep/20/little-endian-vs-big-endian.html (sẽ xin phnghiền tác giả

*

)

Little endian với big endian, đây là nhì cách tiến hành không giống nhau nhằm 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 cho bọn chúng làm gì. Bởi phần đông việc sẽ được auto hoá hết.quý khách hàng đã xem: Big endian là gì

Thế dẫu vậy bao gồm trường hợp, ví dụ lúc yêu cầu cách xử lý các tập tin gồm cấu tạo, tập tin binary, tốt nhất là gần như tập tin được ghi bằng ngữ điệu khác, thì bài toán phát âm về little endian cùng big endian là hết sức quan trọng. Bởi nếu như không, siêu rất có thể chúng ta đang phát âm không đúng vật dụng từ bỏ và cách xử lý cùng với dữ liệu được phát âm không nên.

Bạn đang xem: Big endian là gì

Dữ liệu

Dữ liệu là diễn đạt của công bố bên dưới dạng lưu trữ được. tin tức là sản phẩm công nghệ trừu tượng, không có dạng hình, đó là các phát âm biết về các sự đồ vật, vụ việc bao phủ họ. Để lưu trữ, cũng giống như truyền đạt ban bố cho hầu như tín đồ, bọn họ yêu cầu mang lại tài liệu. Dữ liệu rất có thể là chữ viết, hình hình ảnh được ghi trên chứng từ, tất cả họ tài liệu mà lại bé bạn rất có thể gọi được.

Nhưng phần nhiều tài liệu đó rất cần được được mã hoá một lần nữa, nếu họ ước ao tàng trữ bọn chúng bên trên máy tính xách tay. Nlỗi chúng ta phần lớn biết, máy tính chỉ làm việc với tài liệu được mã hoá dưới dạng nhị phân, vậy bắt buộc phần đông dữ liệu cần phải mã hoá thành nhị phân bắt đầu hoàn toàn có thể giải pháp xử lý bên trên máy tính được.

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

Thực ra, máy tính không hiểu được những ký kết từ bỏ 0, 1 trong hệ nhị phân đâu, nó chuyển động theo các biểu thị năng lượng điện tử. Mô tả đúng đắn thì vô cùng khó khăn, dẫu vậy chúng ta cũng có thể hiểu "sơ sơ" rằng, gặp gỡ bit 1 thì sẽ sở hữu dòng diện, gặp mặt bit 0 thì không có. do đó, các bit 0, 1 được cách xử lý thành các biểu lộ điện tử khớp ứng, cùng bọn họ coi kia như laptop sẽ gọi được tài liệu nhị phân.

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

Thế dẫu vậy, cực kỳ may là các máy tính vẫn vận động theo đa số tiêu chuẩn chỉnh chung, vậy cho nên nó vẫn có thể tiếp xúc cùng nhau được. Tuy nhiên, để ý rằng, không phải bất kể thời gian làm sao, các laptop cũng rất có thể đọc được lẫn nhau.

Trong máy tính, những dữ liệu nhị phân ko được xử lý theo từng bit đơn nhất, mà được cách xử trí thành từng kăn năn 8 bit một, với đơn vị chức năng giải pháp xử lý nhỏ tuyệt nhất này điện thoại tư vấn là byte.

lấy ví dụ, số nguyên ổn 123456789 được trình diễn bên dưới dạng nhị phân sẽ là (tại chỗ này tôi nhận định rằng hình trạng tài liệu int sẽ sở hữu form size là 4 byte, tuy vậy, nhiều hệ thống 64 bit vẫn nâng kích thước này lên 8 byte)

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

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

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

Little endian với big endian là gì?

Little endian với big endian là nhì phương thức khác biệt để tàng trữ tài liệu. Sự khác biệt của little endian với big endian lúc lưu trữ đó là sinh sống câu hỏi thu xếp thiết bị từ những byte tài liệu.

Trong chế độ lưu trữ little endian (khởi đầu từ "little-end" nghĩa kết thúc nhỏ hơn), byte sau cuối trong màn biểu diễn nhị phân bên trên sẽ tiến hành ghi trước. Ví dụ 123456789 ghi theo kiểu little endian đã thành

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

07 5b cd 15Các thuật ngữ big-kết thúc tuyệt little-end xuất phát điểm từ cuốn đái tngày tiết Gulliver du ký kết (Gulliver"s Travels), trong những số ấy nhân trang bị Lilliputans tranh cãi về vấn đề cần đập trứng bởi đầu to tốt nhỏ tuổi.

Và ngành IT vẫn áp dụng thuật ngữ ngày, kha khá giống cùng với nghĩa nơi bắt đầu. Lưu ý rằng, little endian tuyệt big endian chỉ không giống nhau sống bí quyết bố trí các byte dữ liệu, còn sản phẩm công nghệ từ bỏ từng bit vào byte thì tương đương nhau. Rất may, những máy vi tính vẫn có điểm trung này.

Thêm một để ý nữa rằng, little endian tốt big endian chỉ khác biệt Lúc cần tàng trữ hầu như dữ liệu có nhiều byte. Những tài liệu chỉ có 1 byte (ví dụ ký kết tự ASCII) thì ko ảnh hưởng gì (và đúng là mặc dù cần sử dụng cách làm làm sao tác dụng cũng giống như nhau)

Little endian cùng big endian được sử dụng trên gần như máy tính xách tay nào?

Việc sắp xếp những byte dữ liệu theo kiểu little endian xuất xắc big endian không những xẩy ra Khi bọn họ lưu trữ dữ liệu ra bộ nhớ lưu trữ bên cạnh. Mọi buổi giao lưu của máy tính xách tay hầu như áp dụng dữ liệu nhị phân, bắt buộc little endian/big endian hiện hữu trong những hoạt động vui chơi của laptop.

Ngoài câu hỏi sử dụng little endian/big endian một trong những phần phụ thuộc vào vào phần mềm (vì chưng lập trình viên cố gắng ý áp dụng một trong các nhị nhiều loại, hoặc ngữ điệu lập trình lý lẽ trước), nó còn nhờ vào vào cỗ vi cách xử trí của bao gồm máy vi tính kia.

Các cỗ vi xử lý Hãng sản xuất Intel mọi áp dụng little endian, các cỗ vi xử lý cả ARM trước đây cũng là little endian, nhưng mà hiện nay này ARM sẽ tăng cấp vi giải pháp xử lý của mình thành bi-endian (có nghĩa là giải pháp xử lý cả little endian cùng big endian).

Các bộ vi xử trí PowerPC với SPARK trước đây hầu hết là big endian, tuy vậy hiện giờ bọn chúng cũng được upgrade thành bi-endian.

Các làm cho như thế nào thì tốt hơn: little endian xuất xắc big endian?

Little endian tuyệt big endian tương tự như tranh cãi cội về việc đập trứng, không có một phương thức nào thực thụ tốt rộng cách tiến hành nào.

Little endian hay big endian chỉ khác biệt sinh hoạt vấn đề lưu trữ đồ vật từ bỏ các byte tài liệu. Cả nhị cách tiến hành số đông ko làm ảnh hưởng đến tốc độ cách xử lý của CPU. Thế buộc phải cả nhì cách thức phần lớn vẫn trường tồn tuy vậy tuy vậy cùng sẽ không còn khi nào rất có thể tất cả một câu trả lời thoả đáng: Pmùi hương thức làm sao thì xuất sắc hơn?

Mỗi thủ tục đều sở hữu gần như ưu thế nhất thiết. Với little endian, vì chưng byte nhỏ dại độc nhất luôn nằm bên cạnh trái, nó sẽ cho phép họ gọi dữ liệu cùng với độ lâu năm tuỳ ý. Nó sẽ khá phù hợp trường hợp bọn họ đề nghị xay vẻ bên ngoài, ví dụ tự int thành long int.

Với trả định int là 4 byte, long int là 8 byte, nếu như dùng little endian, Lúc xay vẻ bên ngoài, liên hệ bộ nhớ không cần thiết phải đổi khác, chúng ta chỉ cần ghi tiếp những byte lớn hơn nhưng mà thôi.

Nhưng nếu cũng trường hòa hợp đó, nhưng sử dụng big endian, thì họ sẽ bắt buộc dịch shop bộ lưu trữ hiện thời thêm 4 byte nữa mới có không gian để tàng trữ.

Nhưng big endian cũng đều có dẫu vậy lợi thế một mực, cùng với câu hỏi phát âm tài liệu byte lớn nhất trước, nó sẽ rất dễ ợt kiểm tra một số là âm xuất xắc dương, vày byte đựng dấu được hiểu trước tiên.

Xem các byte tài liệu vào bộ nhớ

#include /* function khổng lồ show bytes in memory, from location start to lớn start+n */voidshow_mem_rep (char *start, int n) int i; for (i = 0; i n; i++) printf (" %.2x", start); printf (" ");/* Main function khổng lồ gọi above sầu function for 0x01234567 */intmain () int i = 0x01234567; show_mem_rep ((char *) &i, sizeof (i)); return 0;Khi thực hiện lịch trình bên trên, nếu như sản phẩm công nghệ của doanh nghiệp là little endian thì hiệu quả sẽ là

67 45 23 01còn ví như máy bạn là big endian thì nó đã hiển thị theo thứ tự thông thường

01 23 45 67Có bí quyết làm sao nhằm xác định máy tính xách tay của họ là little endian giỏi big endian tuyệt không? Có rất nhiều những biện pháp khác biệt, bên dưới đây là một trong các những phương pháp đó:

#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 đơn giản và dễ dàng bên trên, c là nhỏ trỏ, nó trỏ đến vùng ghi nhớ của biến chuyển i là một trong những nguyên ổn. Bởi bởi số nguyên ổn là vẻ bên ngoài dữ liệu những byte, vào khí tài liệu của char chỉ là một trong byte mà thôi, yêu cầu *c đang trả về quý giá là byte trước tiên của số nguim i.

Xem thêm: Vai Trò Của Beta Carotene Là Gì ? Vai Trò Của Beta Caroten Với Sức Khỏe

Nếu máy tính xách tay của họ là little endian thì byte thứ nhất này sẽ là một trong những, ngược trở lại thì nó sẽ là 0.

Vấn đề này tác động chũm nào đến sự việc lập trình

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

Tuy nhiên, một số trong những trường vừa lòng, họ bắt buộc quyên tâm, đặc trưng lúc đổi khác dữ liệu thân những máy tính xách tay không giống nhau. Ví dụ: Lúc chúng ta nên cách xử lý một tệp tin có cấu trúc ráng này, 4 byte thứ nhất là một trong những nguim n, tiếp đến là n số nguyên, mỗi số chiếm 4 byte bộ nhớ, v.v...

Trong ngôi trường đúng theo này, Khi nhấn file được tạo nên từ 1 máy tính xách tay khác, câu hỏi nó được ghi theo kiểu little endian hay big endian ví dụ là ảnh hưởng hết sức nghiêm trọng, nếu như áp dụng không đúng cách tiến hành, chúng ta vẫn bỏ túi tài liệu sai.

Một trường hợp không giống nữa có thể xảy ra vấn đề là lúc chúng ta ép phong cách cho những biến

#include intmain () unsigned char arr = 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 vẫn nghiền phong cách một array nhì thành phần char thành một số nguim 2 byte (short int). Trong ví dụ này, little endian tuyệt big endian cũng có tác động rất cao.

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

Vấn đề NUXI

NUXI là 1 trong những vụ việc hết sức lừng danh liên quan mang đến little endian với big endian: UNIX được lưu trong một khối hệ thống big-endian sẽ tiến hành đọc là NUXI vào một khối hệ thống little endian.

Giả sử họ nên lưu trữ 4 byte (U, N, I, X) bằng nhì số ngulặng dạng short int: UN và IX.

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

Với bất kể tài liệu nào cũng vậy, chúng ta luôn chiếm được tài liệu đúng nếu như phát âm với ghi trong cùng một khối hệ thống. Thế nhưng lại, hãy xem xét kỹ hơn về việc sắp xếp những byte trong bộ nhớ.

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

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

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

Đây chính là vấn rất nhiều nguy nan nhất lúc bọn họ trao đỏi dữ liệu qua lại thân các máy vi tính với nhau, quan trọng trong thời đại Internet thời nay.

Trao đổi dữ liệu giữa các thứ gồm endian không giống nhau

Ngày nay, các máy vi tính gần như được liên kết để thảo luận tài liệu cùng nhau. Little endian tuyệt big endian cũng phần đa đề xuất trao đổi với nhau, nhưng có tác dụng chũm như thế nào để có đọc được nhau khi bọn chúng ko nói tầm thường một sản phẩm công nghệ tiếng?

Có 2 phương án chính mang đến bài toán này

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

Một phương pháp dễ dàng tốt nhất tất cả áp dụng chung một định dang Khi truyền tài liệu.

ví dụ như các tập tin dạng PNG hầu như cần phải sử dụng big endian. Tương trường đoản cú cùng với những tập tin bao gồm cấu tạo không giống. Đó là nguyên do bởi sao họ nhiều khi cần phải dùng phần nhiều phần mềm chuyên được dùng để phát âm với ghi các tệp tin này.

Thế tuy thế vào kết nối với Internet, Việc truyền tài liệu còn phức tạp không dừng lại ở đó. Chúng ta chẳng thể cứ dùng một format file như thế nào đó, rồi truyền từng byte một thanh lịch sản phẩm khác được. Muốn tăng tốc độ, cần bọn họ buộc phải truyền những byte một dịp.

Và lúc đó họ cần có một chuẩn chỉnh chung. Hiện giờ, chuẩn chỉnh phổ biến mang lại bài toán truyền dữ liệu trên mạng, Điện thoại tư vấn là network byte order chính là big endian. Thế mà lại, cho dù đang chuẩn bình thường rồi, thỉnh thoảng vẫn đang còn phần đa giao thức nghịch chội rộng, áp dụng little endian.

Để có thể thay đổi tài liệu thành dữ liệu chuẩn theo network byte order, công tác buộc phải call hàm hton* (host-to-network) (vào ngôn từ C). Trong hệ thống big endian, hàm này sẽ không đề xuất làm gì cả, còn little endian vẫn thực hiện chuyển đối các byte một chút.

Dù hệ thống big endian không yêu cầu biến đổi dữ liệu, Việc Call hàm này vẫn là siêu cần thiết. Cmùi hương trình của bạn cũng có thể được viết bởi một ngữ điệu (C) dẫu vậy có thể được dịch và thực thi làm việc các hệ thống khác biệt, Việc hotline hàm này sẽ giúp đỡ họ làm cho điều này.

Tương từ, ở chiều ngược lại, bọn họ đề nghị Gọi hàm ntoh* nhằm biến hóa tài liệu nhận thấy từ mạng về tài liệu máy tính rất có thể gọi được. Hình như, chúng ta còn đề xuất hiểu rõ giao diện tài liệu mà lại bọn họ đề xuất thay đổi nữa, danh sách các hàm biến hóa nhỏng sau:

htons - "Host to Network Short"htonl- "Host khổng lồ Network Long"ntohs - "Network lớn Host Short"ntohl - "Network to lớn Host Long"

Những hàm này vô cùng quan trọng Lúc thực hiện phân tách đang tài liệu trên tầng rẻ, ví dụ khi kiểm soát checksum của các gói tin ví dụ điển hình. Nếu ko nắm rõ về little endian và big endian thì lúc đề nghị thao tác về mạng, bạn sẽ gặp gỡ những trở ngại.

Sử dụng BOM (Byte Order Mark)

Một phương án không giống nhằm xử lý sự biệt lập về endian là áp dụng BOM (Byte Order Mark). Đây là một trong những ký từ đặc biệt, có giá trị là 0xFEFF, được ghi ở đoạn thứ nhất của tệp tin.

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

Có một vài vấn đề nhỏ tuổi cùng với việc thực hiện BOM. Thđọng tuyệt nhất, BOM sẽ gây tăng dữ liệu được ghi vào file. mặc khi Khi họ chỉ gửi đi 2 byte tài liệu, chúng ta vẫn phải thêm 2 byte BOM nữa.

Thđọng hai, BOM ko trọn vẹn thần thánh, bởi vì nó dựa vào vào lập trình sẵn viên. Có người dân có trung ương thì đọc và xử lý lúc gặp BOM, bao gồm bạn thì trọn vẹn không để ý nó và coi nói như dữ liệu thông thường. Unicode áp dụng BOM Khi lưu trữ dữ liệu các byte (những ký kết tự Unicode được mã hoá thành 2, 3 thậm chí là 4 byte).