ENDIAN LÀ GÌ

  -  
*
)

Little endian và big endian, đấy là nhì cách làm không giống nhau nhằm lưu trữ tài liệu dạng nhị phân (binary). Bình hay thì chúng ta cũng chẳng đề nghị quan tâm cho chúng làm những gì. Bởi các việc sẽ được auto hoá không còn.

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

Thế tuy vậy bao hàm trường hợp, ví dụ khi đề xuất cách xử trí những tập tin bao gồm cấu tạo, tập tin binary, duy nhất là số đông tập tin được ghi bằng ngôn từ khác, thì Việc hiểu về little endian và big endian là rất quan trọng đặc biệt. Bởi còn nếu không, rất hoàn toàn có thể bọn họ đang gọi không đúng máy từ và cách xử trí cùng với tài liệu được phát âm không đúng.

Dữ liệu

Dữ liệu là trình bày của đọc tin dưới dạng lưu trữ được. Thông tin là thứ trừu tượng, không tồn tại hình dạng, chính là đông đảo gọi biết về các sự thứ, vụ việc bao quanh họ. Để tàng trữ, cũng tương tự truyền đạt thông báo mang lại rất nhiều người, chúng ta đề xuất đến tài liệu. Dữ liệu hoàn toàn có thể là chữ viết, hình hình ảnh được ghi trên giấy tờ, toàn bộ bọn họ dữ liệu mà con fan có thể gọi được.

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

Thực ra điều đó chỉ đúng với máy tính xách tay số (digital electronic computer). Nghe nói bây giờ máy vi tính lượng tử, laptop sinh học tập cũng đang được trở nên tân tiến, hy vọng trong vài năm cho tới, bọn họ vẫn update lại kỹ năng về dữ liệu.

Thực ra, máy vi tính không hiểu biết nhiều được những cam kết trường đoản cú 0, một trong các hệ nhị phân đâu, nó hoạt động theo các dấu hiệu năng lượng điện tử. Mô tả đúng mực thì khôn xiết cạnh tranh, tuy nhiên bạn có thể phát âm "sơ sơ" rằng, chạm mặt bit 1 thì sẽ có được loại diện, gặp gỡ bit 0 thì không có. do vậy, các bit 0, 1 được giải pháp xử lý thành các biểu thị năng lượng điện tử khớp ứng, với họ coi đó nlỗi máy tính đang gọi được dữ liệu nhị phân.

Thế nhưng lại, tuy vậy thuộc sử dụng biểu lộ dạng nhị phân, những máy tính xách tay khác nhau cũng không thực thụ nói chung một ngôn từ. Cũng y hệt như coi người vậy, Khi quan sát các cam kết trường đoản cú a, b, c tất cả fan đọc, tất cả bạn ko. Máy tính lúc nhìn vào các biểu hiện tương xứng cùng với các cam kết hiệu 0 hay một, từng laptop có thể hiểu theo một phương pháp khác biệt.

Thế tuy nhiên, rất may là các laptop vẫn chuyển động theo số đông tiêu chuẩn chỉnh bình thường, vậy nên nó vẫn rất có thể giao tiếp với nhau được. Tuy nhiên, để ý rằng, chưa hẳn bất cứ cơ hội nào, những máy tính xách tay cũng hoàn toàn có thể đọc được cho nhau.

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

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

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

07 5b cd 15Đã có lúc nào, chúng ta trường đoản cú hỏi, Lúc ghi dữ liệu này trên đĩa cứng ví dụ điển hình, nó được ghi gắng làm sao không. quý khách nhận định rằng, nó sẽ được ghi theo thứ tự theo sản phẩm từ nhưng họ đã hiểu và viết sinh sống trên, thì các bạn đã nhầm.

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

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

Little endian với big endian là nhì phương thức khác biệt để lưu trữ tài liệu. Sự khác hoàn toàn của little endian với big endian Khi tàng trữ chính là sống vấn đề sắp xếp lắp thêm tự các byte tài liệu.

Trong cơ chế tàng trữ little endian (xuất phát điểm từ "little-end" nghĩa xong nhỏ tuổi hơn), byte ở đầu cuối trong màn biểu diễn nhị phân bên trên sẽ được ghi trước. ví dụ như 123456789 ghi theo phong cách little endian đang thành

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

07 5b cd 15Các thuật ngữ big-kết thúc giỏi little-kết thúc bắt nguồn từ cuốn nắn tiểu tngày tiết Gulliver du ký (Gulliver"s Travels), trong các số ấy nhân vật dụng Lilliputans tranh cãi về câu hỏi đề nghị đập trứng bởi đầu to lớn tuyệt bé dại.

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

Thêm một lưu ý nữa rằng, little endian xuất xắc big endian chỉ khác biệt khi yêu cầu tàng trữ những tài liệu có không ít byte. Những dữ liệu chỉ có 1 byte (ví dụ ký từ bỏ ASCII) thì không ảnh hưởng gì (đúng là dù cần sử dụng cách thức nào kết quả cũng tương tự nhau)

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

Việc bố trí những byte dữ liệu theo phong cách little endian tốt big endian không những xẩy ra khi họ tàng trữ dữ liệu ra bộ lưu trữ xung quanh. Mọi hoạt động vui chơi của máy tính xách tay phần lớn sử dụng dữ liệu nhị phân, đề xuất little endian/big endian tồn tại vào đều hoạt động của máy vi tính.

Ngoài bài toán sử dụng little endian/big endian 1 phần nhờ vào vào phần mềm (vì xây dựng viên cụ ý áp dụng một trong những hai các loại, hoặc ngôn từ xây dựng chính sách trước), nó còn phụ thuộc vào vào bộ vi cách xử trí của chính máy tính xách tay đó.

Các cỗ vi xử trí Hãng Intel hầu hết áp dụng little endian, các cỗ vi giải pháp xử lý cả ARM trước đây cũng là little endian, nhưng lại hiện tại này ARM đã tăng cấp vi cách xử trí của chính bản thân mình thành bi-endian (tức là xử trí cả little endian và big endian).

Các bộ vi giải pháp xử lý PowerPC và SPARK trước đây các là big endian, tuy nhiên hiện thời bọn chúng cũng khá được upgrade thành bi-endian.

Các có tác dụng như thế nào thì tốt hơn: little endian hay big endian?

Little endian giỏi big endian tương tự như tranh biện nơi bắt đầu về câu hỏi đập trứng, không có một cách làm như thế nào thực thụ giỏi rộng cách tiến hành làm sao.

Little endian tuyệt big endian chỉ khác nhau nghỉ ngơi Việc lưu trữ máy từ những byte dữ liệu. Cả nhị cách làm phần nhiều không làm tác động đến vận tốc cách xử lý của CPU. Thế bắt buộc cả nhị cách làm phần đông vẫn tồn tại tuy vậy song cùng sẽ không còn lúc nào hoàn toàn có thể tất cả một câu trả lời thoả đáng: Phương thức làm sao thì giỏi hơn?

Mỗi cách thức đều có đa số ưu thế nhất thiết. Với little endian, vày byte bé dại độc nhất vô nhị luôn nằm cạnh trái, nó đang có thể chấp nhận được họ gọi tài liệu với độ dài tuỳ ý. Nó sẽ khá tương thích giả dụ bọn họ phải nghiền giao diện, ví dụ trường đoản cú int thành long int.

Với đưa định int là 4 byte, long int là 8 byte, trường hợp dùng little endian, Khi xay hình trạng, thúc đẩy bộ lưu trữ không nhất thiết phải đổi khác, họ chỉ việc ghi tiếp các byte lớn hơn cơ mà thôi.

Nhưng giả dụ cũng ngôi trường vừa lòng kia, nhưng thực hiện big endian, thì chúng ta đã yêu cầu dịch liên quan bộ nhớ ngày nay thêm 4 byte nữa bắt đầu bao gồm không gian để tàng trữ.

Nhưng big endian cũng có tuy thế ưu thế nhất quyết, với Việc phát âm dữ liệu byte lớn nhất trước, nó sẽ khá dễ dàng khám nghiệm một số trong những là âm tuyệt dương, vị byte chứa dấu được đọc trước tiên.

Xem các byte dữ liệu vào cỗ nhớ

Chương trình C đơn giản nhau mang đến họ ý kiến về câu hỏi sắp xếp các byte vào bộ nhớ lưu trữ.

Xem thêm: N-Word Là Gì ? N Words Có Nghĩa Là Gì

#include /* function to lớn show bytes in memory, from location start to 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ồ Hotline above sầu function for 0x01234567 */intmain () int i = 0x01234567; show_mem_rep ((char *) &i, sizeof (i)); return 0;Lúc tiến hành lịch trình trên, ví như thứ của người tiêu dùng là little endian thì kết quả đang là

67 45 23 01còn giả dụ thiết bị các bạn là big endian thì nó đã hiển thị theo thứ tự thông thường

01 23 45 67Có giải pháp làm sao nhằm xác minh máy vi tính của chúng ta là little endian hay big endian xuất xắc không? Có vô số các bí quyết khác biệt, dưới đấy là một trong những 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 bên trên, c là nhỏ trỏ, nó trỏ mang lại vùng nhớ của biến hóa i là một số nguyên. Bởi do số nguim là loại dữ liệu nhiều byte, trong khí dữ liệu của char chỉ là 1 byte nhưng mà thôi, buộc phải *c đang trả về giá trị là byte thứ nhất của số ngulặng i.

Nếu máy vi tính của chúng ta là little endian thì byte trước tiên này đã là một trong những, ngược chở lại thì nó sẽ là 0.

Điều này tác động chũm làm sao tới việc lập trình

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

Tuy nhiên, một trong những trường thích hợp, họ bắt buộc quyên tâm, đặc trưng Lúc chuyển đổi dữ liệu giữa những laptop không giống nhau. Ví dụ: lúc họ nên xử lý một tệp tin bao gồm cấu trúc nắm này, 4 byte đầu tiên là một trong những nguim n, kế tiếp là n số ngulặng, từng số chỉ chiếm 4 byte bộ nhớ lưu trữ, v.v...

Trong ngôi trường vừa lòng này, Khi dìm tệp tin được tạo nên xuất phát điểm từ một máy tính khác, vấn đề nó được ghi theo phong cách little endian tuyệt big endian rõ ràng là ảnh hưởng vô cùng rất lớn, nếu thực hiện không đúng phương thức, họ đã tiếp thu tài liệu không nên.

Một ngôi trường hợp khác nữa rất có thể xảy ra vấn đề là khi họ xay đẳng cấp cho những 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 trên, họ sẽ xay hình dạng một array hai phần tử char thành một số trong những nguyên ổn 2 byte (short int). Trong ví dụ này, little endian tuyệt big endian cũng đều có tác động rất lớn.

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

Vấn đề NUXI

NUXI là 1 trong vụ việc khôn xiết nổi tiếng liên quan đến little endian với big endian: UNIX được lưu lại trong một khối hệ thống big-endian sẽ tiến hành phát âm là NUXI vào một khối hệ thống little endian.

Giả sử bọn họ cần tàng trữ 4 byte (U, N, I, X) bằng nhị số nguim dạng short int: UN và IX.

#include intmain () short int *s; // pointer khổng lồ 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 lớn next location *s = "IX"; // store second short: I * 256 + X return 0;Đoạn code bên trên trọn vẹn tự do cùng với hệ thống, bất kỳ nó là little hay big endian. Nếu họ lưu trữ những quý giá "UN" với "IX" lúc hiểu ra, nó vẫn sẽ là "UNIX" giỏi không? Nếu đầy đủ Việc chỉ xẩy ra bên trên một máy vi tính, dù là big endian xuất xắc little endian thì nó vẫn luôn là như vậy, bởi vì đều vật dụng sẽ tiến hành tự động hoá góp bọn họ.

Với bất cứ tài liệu nào thì cũng vậy, chúng ta luôn luôn chiếm được tài liệu đúng nếu như hiểu với ghi trong và một khối hệ thống. Thế cơ mà, hãy chú ý kỹ rộng về câu hỏi bố trí những byte vào bộ lưu trữ.

Một khối hệ thống big endian vẫn tàng trữ nlỗi sau:

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

N U X IMặc cho dù trông khá ngược nhưng khối hệ thống little endian vẫn xử trí câu hỏi đọc giúp họ, buộc phải tàng trữ điều này nhưng mà lúc lôi ra chúng ta vẫn có tài liệu lúc đầu. Thế nhưng mà lúc bọn họ ghi tài liệu này ra tệp tin, đưa sang một máy tính xách tay không giống. Và từng máy tính lại xử lý theo cách riêng biệt của chính nó thì UNIX bên trên thứ big endian sẽ được hiểu là NUXI bên trên sản phẩm little endian (cùng ngược lại).

Đây đó là vấn đa số gian nguy nhất khi bọn họ trao đỏi tài liệu tương hỗ thân những máy tính với nhau, đặc biệt quan trọng trong thời đại Internet ngày nay.

Trao thay đổi tài liệu thân những đồ vật tất cả endian khác nhau

Ngày ni, hồ hết máy tính xách tay hầu hết được liên kết để hội đàm dữ liệu với nhau. Little endian tuyệt big endian cũng đông đảo đề nghị thương lượng với nhau, tuy vậy làm vậy làm sao để sở hữu gọi được nhau Khi chúng không nói thông thường một sản phẩm tiếng?

Có 2 chiến thuật bao gồm cho Việc này

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

Một giải pháp dễ dàng và đơn giản tuyệt nhất toàn bộ áp dụng chung một định dang Lúc truyền dữ liệu.

lấy một ví dụ đông đảo tập tin dạng PNG những sẽ phải thực hiện big endian. Tương từ bỏ với những tập tin gồm cấu tạo khác. Đó là nguyên nhân vị sao chúng ta đôi khi rất cần phải sử dụng phần nhiều phần mềm chuyên được sự dụng nhằm đọc và ghi các file này.

Thế tuy nhiên trong 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 cần yếu cđọng sử dụng một định hình tệp tin như thế nào kia, rồi truyền từng byte một quý phái trang bị khác được. Muốn tăng tốc độ, phải chúng ta buộc phải truyền nhiều byte một dịp.

Và khi đó bọn họ cần phải có một chuẩn tầm thường. Lúc này, chuẩn chỉnh phổ biến đến câu hỏi truyền tài liệu bên trên mạng, Gọi là network byte order đó là big endian. Thế tuy nhiên, mặc dù đã chuẩn thông thường rồi, thỉnh phảng phất vẫn đang còn những giao thức nghịch chội hơn, áp dụng little endian.

Để có thể biến đổi tài liệu thành dữ liệu chuẩn theo network byte order, công tác cần hotline hàm hton* (host-to-network) (vào ngữ điệu C). Trong hệ thống big endian, hàm này không nên làm gì cả, còn little endian sẽ triển khai chuyển đối những byte một chút ít.

Dù hệ thống big endian ko phải biến đổi tài liệu, bài toán call hàm này vẫn chính là cực kỳ 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ôn từ (C) nhưng hoàn toàn có thể được dịch và xúc tiến sinh hoạt nhiều khối hệ thống khác nhau, vấn đề điện thoại tư vấn hàm này sẽ giúp đỡ chúng ta có tác dụng điều đó.

Tương từ bỏ, sinh sống chiều ngược trở lại, họ nên Hotline hàm ntoh* nhằm đổi khác tài liệu cảm nhận từ bỏ mạng về dữ liệu máy vi tính có thể phát âm được. Hình như, chúng ta còn đề xuất làm rõ đẳng cấp dữ liệu mà lại bọn họ yêu cầu biến hóa nữa, danh sách những hàm biến hóa nhỏng sau:

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

Những hàm này cực kỳ đặc biệt quan trọng Khi triển khai chia đã tài liệu ở tầng thấp, ví dụ lúc kiểm soát checksum của những gói tin chẳng hạn. Nếu ko làm rõ về little endian với big endian thì khi nên làm việc về mạng, các bạn sẽ chạm chán những khó khăn.

Sử dụng BOM (Byte Order Mark)

Một cách thực hiện khác nhằm giải quyết và xử lý sự khác hoàn toàn về endian là áp dụng BOM (Byte Order Mark). Đây là một trong những cam kết từ bỏ đặc trưng, có giá trị là 0xFEFF, được ghi tại vị trí đầu tiên của tệp tin.

Nếu bạn đọc ký kết tự này là 0xFFFE (bị ngược) thì gồm nghĩa tệp tin này được ghi cùng với endian khác với hệ thống của công ty, khi đó, bạn sẽ rất cần phải chuyển đổi cách thức hiểu tài liệu một chút.

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

Xem thêm: Fuck Girl Là Gì - Fuck Boy, Fuck Girl, Bad Girl Là Gì

Thứ nhị, BOM không trọn vẹn thần thánh, bởi nó phụ thuộc vào thiết kế viên. Có người dân có chổ chính giữa thì gọi và cách xử lý khi chạm mặt BOM, tất cả tín đồ thì hoàn toàn quên mất nó với coi nói nhỏng dữ liệu thông thường. Unicode sử dụng BOM lúc lưu trữ tài liệu nhiều byte (những cam kết tự Unicode được mã hoá thành 2, 3 thậm chí là là 4 byte).