簡體   English   中英

在字節00分割十六進制字符串的優雅方法?

[英]Elegant way to split hex string at byte 00?

我需要在每00字節分割一個十六進制字符串。 我試過這個:

string.split('00');

但是這會導致分裂為5009 ,例如,這是不正確的,因為它將一個字節分成兩半。

換句話說,它將5009變為[5, 9] 5009 [5, 9] ,這是我不想要的。 但我確實希望它在af0059轉到[af, 59]

甚至可以使用正則表達式來分割字節,而不會將任何字節減少一半?

我可以使用循環來搜索字符串,只在偶數索引處划分字符串,但我更喜歡正則表達式。

由於字節大小,您需要先將字符串split為字節大小,然后map並最終join

 const string = "af00b9e00f70"; const res = string.split(/([\\d\\w]{4})/).filter(e => e).map(e => e.replace(/00([\\d\\w]{2})/, "$1").replace(/([\\d\\w]{2})00/, "$1")).join(""); console.log(res); 

這是一個有點“老派”的方法,但它證明了校長。我說“老學校”因為我們必須在匯編編碼的時候一直這樣做。 'string'包含長串的十六進制對(字節)。 在這里,我將其轉換為字節值。 將“字符串”更改為您想要的任何內容,但請確保它具有偶數個十六進制數字。 調用'translate'來演示它,並將輸出格式化為alert()(或只輸出到控制台)

var values = []; // output array
var string = "000102030405060708090a0b0c0d0e0f1FFFFEFDFCFBFAF9F8F7F6F5F4F3F2F0";

function getHexByteValues( string) {
    var hex= "0123456789ABCDEF";
    var outIx=0;

    for (var i =0; i <= (string.length-2); i +=2) { // skip every other
        //get higher and lower nibble
         var hexdig1 = string.substring(i, i+1);
         var hexdig0 = string.substring(i+1, i+2);
         // for simplicity, convert alpha to upper case
         hexdig1 = hexdig1.toUpperCase();
         hexdig0 = hexdig0.toUpperCase();

         // convert hex to decimal value.
         // position in lookup string == value
         var dec1 = hex.indexOf(hexdig1);
         var dec0 = hex.indexOf(hexdig0);

         // calc "byte" value, and add to values.
         values[outIx++] = dec1 * 16 + dec0;
        }
    }


function translate(string) {
    getHexByteValues(string);
    var output="";

    for (var i =0; i < values.length; i++)  {
        output += i + " = " + values[i] + "\r\n";
        }
    alert (output);
    }   

也許不是最優雅的,但它的確有效

const inp = "af00b9e00f70"
const out = inp.match(/.{1,2}/g).map(a=>a=="00"?"_":a).join("").split("_");
console.log(out);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM