User Rating 0.0
Total Usage 0 times
Drop any file here or click to browse Supports all file types · Processed locally
Is this tool helpful?

Your feedback helps us improve.

About

Every file on disk is a sequence of bytes. Text editors hide this reality behind character encodings. When you need to verify a file signature, inspect a corrupted header, or reverse-engineer a binary protocol, you need raw byte access. This tool renders any file as a paginated hex dump with synchronized ASCII preview, byte-level selection, and multi-type value inspection via DataView. It operates entirely in-browser using the File API and ArrayBuffer - no data leaves your machine. Limitation: rendering is paginated at 256 bytes per page to keep DOM size constant regardless of file size. Files of any size load, but navigation is page-based, not scroll-based.

Common use cases include verifying magic bytes (e.g., PNG files start with 89 50 4E 47), locating embedded strings in firmware images, and debugging serialization formats. The inspector panel decodes the selected byte's offset and value as signed/unsigned integers, IEEE 754 floats, and both big-endian and little-endian representations. Pro tip: file format specifications almost always document offsets in hexadecimal - use the offset column on the left to cross-reference directly.

binary viewer hex viewer hex editor byte inspector file analysis hex dump binary file file header

Formulas

Byte-to-hexadecimal conversion maps each 8-bit value to a two-character string in base 16:

hexString = byte.toString(16).padStart(2, "0")

The file offset for any byte on page p at position i within that page is:

offset = p × PAGE_SIZE + i

where PAGE_SIZE = 256 bytes by default. ASCII printable range check determines character display:

{
char(b) if 0x20 b 0x7E"." otherwise

Multi-byte value interpretation uses DataView with explicit endianness. For a 16-bit unsigned integer at offset o:

valueLE = byte[o] + byte[o+1] × 256
valueBE = byte[o] × 256 + byte[o+1]

where o = absolute byte offset in the file. IEEE 754 single-precision float uses 4 consecutive bytes; double-precision uses 8.

Reference Data

File TypeExtensionMagic Bytes (Hex)OffsetDescription
PNG Image.png89 50 4E 47 0D 0A 1A 0A0x00PNG signature with DOS/Unix line ending checks
JPEG Image.jpgFF D8 FF0x00JFIF/EXIF marker start
GIF Image.gif47 49 46 380x00GIF87a or GIF89a
PDF Document.pdf25 50 44 46 2D0x00%PDF- header
ZIP Archive.zip50 4B 03 040x00Local file header signature
RAR Archive.rar52 61 72 21 1A 070x00Rar! marker block
7-Zip Archive.7z37 7A BC AF 27 1C0x007z signature header
ELF Executablen/a7F 45 4C 460x00Linux/Unix executable format
PE Executable.exe4D 5A0x00DOS MZ header (Windows PE)
Mach-O (64-bit)n/aCF FA ED FE0x00macOS 64-bit executable
GZIP.gz1F 8B0x00GZIP compressed data
BMP Image.bmp42 4D0x00BM bitmap header
WAV Audio.wav52 49 46 460x00RIFF container (WAVE follows at 0x08)
MP3 Audio.mp3FF FB or 49 44 330x00MPEG frame sync or ID3v2 tag
MP4 Video.mp466 74 79 700x04ftyp box (offset 4, size at 0x00)
WebP Image.webp52 49 46 460x00RIFF container (WEBP at 0x08)
SQLite Database.db/.sqlite53 51 4C 69 74 650x00"SQLite format 3\000"
WASM Binary.wasm00 61 73 6D0x00WebAssembly magic + version
Java Class.classCA FE BA BE0x00Java bytecode identifier
TAR Archive.tar75 73 74 61 720x101"ustar" at offset 257

Frequently Asked Questions

The entire file is loaded into a single ArrayBuffer via the File API, which means the practical limit is your browser's memory allocation (typically 1-2 GB on desktop, less on mobile). The DOM remains lightweight because only 256 bytes are rendered at a time via pagination. For files exceeding ~500 MB, expect a loading delay of several seconds.
Bytes outside the printable ASCII range (0x20-0x7E) are replaced with a period (.) for display safety. Control characters (0x00-0x1F) and extended bytes (0x80-0xFF) have no universal visual glyph and can break text layout or trigger terminal escape sequences. The dot convention matches standard hex dump tools like xxd and HxD.
Load the file and inspect the first 4-8 bytes on page 0. Compare these hex values against the reference table above. For example, if you see 89 50 4E 47 at offset 0x00, the file is a PNG image regardless of its extension. Some formats like MP4 place the type indicator at offset 0x04 (the "ftyp" box), so check the specification for non-zero offsets.
Endianness determines byte order for multi-byte values. Little-endian (LE) stores the least significant byte first - used by x86/x64 CPUs and most modern file formats (ELF, WAV, BMP). Big-endian (BE) stores the most significant byte first - used in network protocols (TCP/IP), Java class files, and PNG chunks. The inspector shows both interpretations so you can match the format's specification.
Yes. The search supports both hex patterns (e.g., '89504E47') and ASCII text strings (e.g., 'RIFF'). When searching as text, each character is converted to its byte value using charCodeAt(). Note that this only works for single-byte encodings (ASCII/Latin-1). Multi-byte UTF-8 characters will not match correctly - use hex search for those.
No. The tool operates entirely client-side using the browser's File API and ArrayBuffer. No network requests are made. The file is read into memory within your browser tab and discarded when you close or reload the page. No data is stored in localStorage - only UI preferences like bytes-per-row and last search mode.