JavaScript中的十六进制和命令行中的十六进制是不同的

时间:2018-04-18 23:26:50

标签: javascript hex

当我使用javascript将文件从文本转换为十六进制时,我得到了这个:

 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E 3D 22 31
 2E 30 22 20 65 6E 63 6F 64 69 6E 67 3D 22 55 54
 46 2D 38 22 20 3F 3E A3 C7 27 37 32 07 66 57 27
 36 96 F6 E3 D2 23 22 E3 02 23 EA A3 C6 36 86 16
 E6 E6 56 C3 EA 20 20 3C 74 69 74 6C 65 3E 57 33
 53 63 68 6F 6F 6C 73 20 48 6F 6D 65 20 50 61 67
 65 3C 2F 74 69 74 6C 65 3E A2 02 03 C6 C6 96 E6
 B3 E6 87 47 47 07 33 A2 F2 F7 77 77 72 E7 73 37
 36 36 86 F6 F6 C7 32 E6 36 F6 D3 C2 F6 C6 96 E6
 B3 EA 20 20 3C 64 65 73 63 72 69 70 74 69 6F 6E
 3E 46 72 65 65 20 77 65 62 20 62 75 69 6C 64 69
 6E 67 20 74 75 74 6F 72 69 61 6C 73 3C 2F 64 65
 73 63 72 69 70 74 69 6F 6E 3E A2 02 03 C6 97 46
 56 D3 EA 20 20 20 20 3C 74 69 74 6C 65 3E 52 53
 53 20 54 75 74 6F 72 69 61 6C 3C 2F 74 69 74 6C
 65 3E A2 02 02 02 03 C6 C6 96 E6 B3 E6 87 47 47
 07 33 A2 F2 F7 77 77 72 E7 73 37 36 36 86 F6 F6
 C7 32 E6 36 F6 D2 F7 86 D6 C2 F7 86 D6 C5 F7 27
 37 32 E6 17 37 03 C2 F6 C6 96 E6 B3 EA 20 20 20
 20 3C 64 65 73 63 72 69 70 74 69 6F 6E 3E 4E 65
 77 20 52 53 53 20 74 75 74 6F 72 69 61 6C 20 6F
 6E 20 57 33 53 63 68 6F 6F 6C 73 3C 2F 64 65 73
 63 72 69 70 74 69 6F 6E 3E A2 02 03 C2 F6 97 46
 56 D3 EA 20 20 3C 69 74 65 6D 3E A2 02 02 02 03
 C7 46 97 46 C6 53 E5 84 D4 C2 05 47 57 46 F7 26
 96 16 C3 C2 F7 46 97 46 C6 53 EA 20 20 20 20 3C
 6C 69 6E 6B 3E 68 74 74 70 73 3A 2F 2F 77 77 77
 2E 77 33 73 63 68 6F 6F 6C 73 2E 63 6F 6D 2F 78
 6D 6C 3C 2F 6C 69 6E 6B 3E A2 02 02 02 03 C6 46
 57 36 37 26 97 07 46 96 F6 E3 E4 E6 57 72 05 84
 D4 C2 07 47 57 46 F7 26 96 16 C2 06 F6 E2 05 73
 35 36 36 86 F6 F6 C7 33 C2 F6 46 57 36 37 26 97
 07 46 96 F6 E3 EA 20 20 3C 2F 69 74 65 6D 3E A3
 C2 F6 36 86 16 E6 E6 56 C3 EA A3 C2 F7 27 37 33
 EA

这是来自命令行(cat rss | od -A n -t x1):

 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E 3D 22 31
 2E 30 22 20 65 6E 63 6F 64 69 6E 67 3D 22 55 54
 46 2D 38 22 20 3F 3E 0A 3C 72 73 73 20 76 65 72
 73 69 6F 6E 3D 22 32 2E 30 22 3E 0A 0A 3C 63 68
 61 6E 6E 65 6C 3E 0A 20 20 3C 74 69 74 6C 65 3E
 57 33 53 63 68 6F 6F 6C 73 20 48 6F 6D 65 20 50
 61 67 65 3C 2F 74 69 74 6C 65 3E 0A 20 20 3C 6C
 69 6E 6B 3E 68 74 74 70 73 3A 2F 2F 77 77 77 2E
 77 33 73 63 68 6F 6F 6C 73 2E 63 6F 6D 3C 2F 6C
 69 6E 6B 3E 0A 20 20 3C 64 65 73 63 72 69 70 74
 69 6F 6E 3E 46 72 65 65 20 77 65 62 20 62 75 69
 6C 64 69 6E 67 20 74 75 74 6F 72 69 61 6C 73 3C
 2F 64 65 73 63 72 69 70 74 69 6F 6E 3E 0A 20 20
 3C 69 74 65 6D 3E 0A 20 20 20 20 3C 74 69 74 6C
 65 3E 52 53 53 20 54 75 74 6F 72 69 61 6C 3C 2F
 74 69 74 6C 65 3E 0A 20 20 20 20 3C 6C 69 6E 6B
 3E 68 74 74 70 73 3A 2F 2F 77 77 77 2E 77 33 73
 63 68 6F 6F 6C 73 2E 63 6F 6D 2F 78 6D 6C 2F 78
 6D 6C 5F 72 73 73 2E 61 73 70 3C 2F 6C 69 6E 6B
 3E 0A 20 20 20 20 3C 64 65 73 63 72 69 70 74 69
 6F 6E 3E 4E 65 77 20 52 53 53 20 74 75 74 6F 72
 69 61 6C 20 6F 6E 20 57 33 53 63 68 6F 6F 6C 73
 3C 2F 64 65 73 63 72 69 70 74 69 6F 6E 3E 0A 20
 20 3C 2F 69 74 65 6D 3E 0A 20 20 3C 69 74 65 6D
 3E 0A 20 20 20 20 3C 74 69 74 6C 65 3E 58 4D 4C
 20 54 75 74 6F 72 69 61 6C 3C 2F 74 69 74 6C 65
 3E 0A 20 20 20 20 3C 6C 69 6E 6B 3E 68 74 74 70
 73 3A 2F 2F 77 77 77 2E 77 33 73 63 68 6F 6F 6C
 73 2E 63 6F 6D 2F 78 6D 6C 3C 2F 6C 69 6E 6B 3E
 0A 20 20 20 20 3C 64 65 73 63 72 69 70 74 69 6F
 6E 3E 4E 65 77 20 58 4D 4C 20 74 75 74 6F 72 69
 61 6C 20 6F 6E 20 57 33 53 63 68 6F 6F 6C 73 3C
 2F 64 65 73 63 72 69 70 74 69 6F 6E 3E 0A 20 20
 3C 2F 69 74 65 6D 3E 0A 3C 2F 63 68 61 6E 6E 65
 6C 3E 0A 0A 3C 2F 72 73 73 3E 0A

JavaScript:

const uploads = []

    const fileSelector = document.getElementById('file-selector')
    fileSelector.addEventListener('change', (event) => {
        console.time('FileOpen')
        const file = event.target.files[0]

        const filereader = new FileReader()

        filereader.onloadend = function(evt) {
            if (evt.target.readyState === FileReader.DONE) {
                const uint = new Uint8Array(evt.target.result)
                let bytes = []
                uint.forEach((byte) => {
                    bytes.push(byte.toString(16))
                })
                const hex = bytes.join('').toUpperCase()

                test=""
                for(var i=0; i<hex.length; i++) {
                   test += hex.charAt(i) + hex.charAt(i+1) + ' ';
                   i++
                }

                console.log(test);

            console.log("hex");
            console.log(hex);

                uploads.push({
                    filename: file.name,
                    filetype: file.type ? file.type : 'Unknown/Extension missing',
                    binaryFileType: getMimetype(hex, (file.type ? file.type : ''), file.name),
                    hex: hex
                })
                render()
            }

            console.timeEnd('FileOpen')
        }


        const blob = file; //file.slice(0, 300);
        console.log("blob");
        console.log(blob);
        console.log("read as text: ");
        //console.log(filereader.readAsText(blob));
        filereader.readAsArrayBuffer(blob);
    })
 [...]

当我获取JS hex结果并将其转回文本时,我得到了这个混乱:

'72fW'6 #“ # 6 V W3Schools首页 GG3 wwr s766 2 6 免费网页建设教程 ƗFV RSSTutorial GG3 wwr s766 2 6 '72 7 W3Schools的新RSS教程 FV F F S GWF &amp; F F S https://www.w3schools.com/xml FW67&amp; F Wr GWF &amp;5s566 3 FW67&amp; F 6 V '73

我不是从另一个十六进制那里得到的。

那么为什么十六进制不同?

1 个答案:

答案 0 :(得分:3)

问题是javascript转换不包括左侧的零。如果转换字节是一位数,则必须包含零。例如,如果convertion返回A,则必须包含零 - &gt; 0A