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.效果
