1.代码
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>bin文件查看器</title> <style>#fileInput {display: none; }.fileInputLabel {display: inline-block;padding: 10px 20px;background-color: #007bff;color: white;border-radius: 5px;cursor: pointer;}.fileInputLabel:hover {background-color: #0056b3;}#fileNameDisplay {margin-top: 10px;padding: 8px;width: 300px;border: 1px solid #ccc;border-radius: 5px;background-color: #f9f9f9;font-family: monospace;}#hexOutput {margin-top: 10px;padding: 8px;width: 100%;height: 300px;border: 1px solid #ccc;border-radius: 5px;font-family: monospace;white-space: pre-wrap;overflow-y: auto;background-color: #f9f9f9;position: relative;}.hex-line {display: flex;}.hex-offset {width: 80px; color: #666;margin-right: 10px;}.hex-values {flex: 1;display: flex;gap: 4px; }.hex-column {width: 20px; text-align: center;}.hex-header {display: flex;margin-left: 90px; gap: 4px; position: sticky;top: 0; background-color: #f9f9f9; z-index: 1; padding-bottom: 8px; border-bottom: 1px solid #ccc; }.hex-header .hex-column {color: #007bff; font-weight: bold;}</style>
</head>
<body><div class="container mt-5"><h1>bin文件查看器</h1> <label for="fileInput" class="fileInputLabel">选择文件</label><input type="file" id="fileInput"><input type="text" id="fileNameDisplay" placeholder="文件名将显示在这里" readonly><div id="hexOutput" placeholder="文件内容将以HEX格式显示在这里"><div class="hex-header"><div class="hex-column">0</div><div class="hex-column">1</div><div class="hex-column">2</div><div class="hex-column">3</div><div class="hex-column">4</div><div class="hex-column">5</div><div class="hex-column">6</div><div class="hex-column">7</div><div class="hex-column">8</div><div class="hex-column">9</div><div class="hex-column">A</div><div class="hex-column">B</div><div class="hex-column">C</div><div class="hex-column">D</div><div class="hex-column">E</div><div class="hex-column">F</div></div></div></div><script>const fileInput = document.getElementById('fileInput');const fileNameDisplay = document.getElementById('fileNameDisplay');const hexOutput = document.getElementById('hexOutput');fileInput.addEventListener('change', function (event) {const file = event.target.files[0]; if (file) {fileNameDisplay.value = file.name;const reader = new FileReader();reader.onload = function (e) {const arrayBuffer = e.target.result;const uint8Array = new Uint8Array(arrayBuffer);let hexContent = '';for (let i = 0; i < uint8Array.length; i += 16) {const chunk = uint8Array.slice(i, i + 16);const offset = i.toString(16).padStart(8, '0'); const hexValues = Array.from(chunk).map(byte => byte.toString(16).padStart(2, '0'));hexContent += `<div class="hex-line"><div class="hex-offset">0x${offset}</div><div class="hex-values">${hexValues.map(value => `<div class="hex-column">${value}</div>`).join('')}</div></div>`;}hexOutput.innerHTML = `<div class="hex-header"><div class="hex-column">0</div><div class="hex-column">1</div><div class="hex-column">2</div><div class="hex-column">3</div><div class="hex-column">4</div><div class="hex-column">5</div><div class="hex-column">6</div><div class="hex-column">7</div><div class="hex-column">8</div><div class="hex-column">9</div><div class="hex-column">A</div><div class="hex-column">B</div><div class="hex-column">C</div><div class="hex-column">D</div><div class="hex-column">E</div><div class="hex-column">F</div></div>${hexContent}`;};reader.readAsArrayBuffer(file);} else {fileNameDisplay.value = ''; hexOutput.innerHTML = `<div class="hex-header"><div class="hex-column">0</div><div class="hex-column">1</div><div class="hex-column">2</div><div class="hex-column">3</div><div class="hex-column">4</div><div class="hex-column">5</div><div class="hex-column">6</div><div class="hex-column">7</div><div class="hex-column">8</div><div class="hex-column">9</div><div class="hex-column">A</div><div class="hex-column">B</div><div class="hex-column">C</div><div class="hex-column">D</div><div class="hex-column">E</div><div class="hex-column">F</div></div>`;}});</script>
</body>
</html>
2.效果
