Wat is het HEX-bestandsformaat?
Bestanden met de extensie .hex maken gebruik van het Intel HEX-formaat - een ASCII-recordformaat in platte tekst dat gecompileerde binaire firmware codeert, zodat deze betrouwbaar kan worden overgedragen naar een programmeur of flashing-tool. In plaats van ruwe binaire gegevens op te slaan, wordt elke byte aan inhoud weergegeven als twee hexadecimale tekens, waardoor het bestand volledig menselijk leesbaar blijft in elke tekstverwerker.
.hex-bestanden zijn altijd platte tekst en kunnen worden geopend met een standaard tekstverwerker zoals Notepad. Om de firmware naar een microcontroller te flashen, worden gespecialiseerde tools zoals avrdude of Arduino IDE gebruikt. Waar ruwe machinecode nodig is, kan een compiler ook een binair .bin-bestand uitvoeren, of een Motorola S-record .srec voor systemen die de voorkeur geven aan dat formaat.
Een .hex-bestand is het resultaat van een compiler of assembler die broncode omzet in machinecode en deze vervolgens codeert voor veilige overdracht naar het doelapparaat.
Waar .hex-bestanden worden gebruikt
Gegevens in .hex-bestanden worden gebruikt om microcontrollers te programmeren en om inhoud te schrijven naar ingebedde geheugens zoals EEPROM en Flash-opslag. Microcontrollers zijn geïnstalleerd in veel veelgebruikte apparaten - van afstandsbedieningen en systemen die een automotor aansturen tot moderne IoT-sensoren en robotica-hardware.
Structuur van gegevens in .hex-bestanden
Hexadecimale gegevens in een .hex-bestand worden opgeslagen in tekstregels die records worden genoemd, en elk record bestaat uit zes velden:
- Startcode - een dubbele punt (
:) die het begin van elk record markeert - Byte-aantal - twee hex-cijfers die het aantal gegevensbytes in dat record definiëren
- Adres - vier hex-cijfers die het 16-bits doeladres specificeren (adressering tot 64 KB per segment in het basisformaat)
- Recordtype - twee hex-cijfers, van
00tot05(bijvoorbeeld00= gegevensrecord,01= einde-bestand) - Gegevens - de werkelijke payload, waarbij elke byte is gecodeerd als twee hexadecimale tekens
- Checksum - twee hex-cijfers die de „two's complement” checksum bevatten van alle voorgaande bytes in het record
De laatste regel van elk geldig Intel HEX-bestand is het vaste einde-bestand-record :00000001FF.
Beveiliging & veiligheid
RISICO: MEDIUMEen .hex-bestand bevat platte gegevens en kan niet zelfstandig op je PC worden uitgevoerd, dus het openen ervan in een tekst- of hex-editor is ongevaarlijk. Het echte risico ligt bij het apparaat: het flashen van onbetrouwbare firmware kan hardware onbruikbaar maken („bricken”) of kwaadaardige code op een microcontroller laden. Flash alleen .hex-bestanden van de fabrikant van het apparaat of een bron die je vertrouwt, en bevestig dat het bestand exact overeenkomt met je board/chip voordat je het uploadt. Het handmatig bewerken van firmware-bytes kan de image ook beschadigen.
Formaatdetails
in een notendop- Generieke hex-dump - Een menselijk leesbaar transcript van de ruwe bytes van een ander bestand (offset + hex + ASCII-kolommen) geproduceerd door een hex-editor of tools zoals xxd/hexdump; soms worden ruwe binaire blobs ook losjes opgeslagen als .hex.
Programma's die HEX-bestanden openen
Technische details
diepe specificaties| Codering | Pure ASCII-tekst; elke gegevensbyte wordt weergegeven als twee hexadecimale tekens |
| Startteken record | Dubbele punt `:` (0x3A) - elke recordregel begint met dit teken; er is geen binair magisch getal |
| Recordtypes | Zes types genummerd 00-05: gegevens (00), einde-bestand (01), uitgebreid segmentadres (02), startsegmentadres (03), uitgebreid lineair adres (04), start lineair adres (05) |
| Basis adresbereik | 16-bits adressering per segment, tot 64 KB zonder adres-extensierecords |
| Uitgebreid adresbereik | Tot 4 GB (32-bits) met type-04 Extended Linear Address records, wat volledige 32-bits memory mapping mogelijk maakt |
| Max gegevensbytes per record | Tot 255 bytes (0xFF) aan gegevens per record; in de praktijk wordt vaak 16 of 32 bytes per record gebruikt |
| Checksum-algoritme | 8-bits two's complement van alle bytes in het record (byte-aantal, adres, recordtype en gegevens), exclusief de start-dubbele punt |
| Einde-bestand markering | Vast record `:00000001FF` moet elk geldig Intel HEX-bestand afsluiten |
| MIME-type | text/plain |
| Adres byte-volgorde | Big-endian - meest significante byte eerst in adres- en multi-byte-aantalvelden |
| Primair gebruik | Programmeren van Flash en EEPROM op microcontrollers zoals AVR, PIC, ARM Cortex-M en 8051-families |
| Oorsprong toolchain | Output van compilers en assemblers waaronder avr-gcc, MPLAB X IDE, Keil MDK en IAR Embedded Workbench |
| Bestandsgrootte overhead | Ongeveer 1,4-2× de ruwe binaire grootte, omdat elke byte aan gegevens twee ASCII-tekens wordt plus omlijstingsbytes per record |
| Uitgebracht | 1973 (Intel HEX format) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | en.wikipedia.org |
HEX conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over HEX-bestanden.