Ich habe einen vorzeichenbehafteten Wert als Hexadezimalzahl angegeben, z. B. 0xffeb
und möchte es in -21
als eine "normale" Javascript-Ganzzahl konvertieren.Javascript: Konvertieren einer (hex) signierten Ganzzahl in einen JavaScript-Wert
ich einige Code geschrieben haben bisher:
function toBinary(a) { //: String
var r = '';
var binCounter = 0;
while (a > 0) {
r = a%2 + r;
a = Math.floor(a/2);
}
return r;
}
function twoscompl(a) { //: int
var l = toBinaryFill(a).length;
var msb = a >>> (l-1);
if (msb == 0) {
return a;
}
a = a-1;
var str = toBinary(a);
var nstr = '';
for (var i = 0; i < str.length; i++) {
nstr += str.charAt(i) == '1' ? '0' : '1';
}
return (-1)*parseInt(nstr);
}
Das Problem ist, dass meine Funktion 1 als MSB gibt für beide Zahlen, da nur am MSB der Binärdarstellung „string“ betrachtet wird. Und für diesen Fall beide Zahlen sind 1:
-21 => 0xffeb => 1111 1111 1110 1011
21 => 0x15 => 1 0101
Haben Sie eine Ahnung dieses effizienter und schöner zu implementieren?
Grüße, mythbu
sollten Sie minus '0x10000' – xiaoyi
@xiaoyi Sie haben Recht, repariert es. –
Nicht sicher, wie wichtig es ist, aber da Sie mit hex mit 'parseInt' arbeiten, möchten Sie wahrscheinlich' parseInt (a, 16) ' – Ian