conversión binaria js (toString (), parseInt (), paquete String.format)

El método de conversión de números arbitrarios js es el siguiente:

1. Método JavaScript toString ()

1. Definición y uso

Representación de cadena del número. Por ejemplo, cuando radix es 2, NumberObject se convertirá en una cadena representada por un valor binario.

2. Gramática

número .toString ( base )

3. Valor del parámetro

parámetro descripción
base Opcional. Especifica la base del número, que es un número entero entre 2 y 36. Si se omite este parámetro, se utiliza la base 10. Pero tenga en cuenta que si el parámetro es un valor distinto de 10, el estándar ECMAScript permite que la implementación devuelva cualquier valor.
  • 2-Los números se muestran como valores binarios
  • 8-El número se muestra como un valor octal
  • 16-El número se muestra como un valor hexadecimal

4. Valor devuelto

Tipos de descripción
Cuerda Convertir número en cadena

5. Ejemplo: 

var count = 10;

console.log(count.toString());    // 输出 '10'
console.log((17).toString());     // 输出 '17'
console.log((17.2).toString());   // 输出 '17.2'

var x = 12;

console.log(x.toString(2));       // 输出 '1100'      10进制转2进制
console.log((254).toString(16));  // 输出 'fe'        10进制转16进制

console.log((10).toString(8));   // 输出 '12'         10进制转8进制
console.log((-0xff).toString(2)); // 输出 '-11111111' 16进制转2进制

Dos, función parseInt () de JavaScript

1. Definición y uso

La función parseInt () puede analizar una cadena y devolver un número entero.

Cuando el valor del parámetro radix es 0, o el parámetro no está establecido, parseInt () determinará la base del número según la cadena.

Cuando se omite el parámetro radix, la base del número predeterminado de JavaScript es la siguiente:

  • Si la cadena comienza con "0x", parseInt () analizará el resto de la cadena en números enteros hexadecimales.
  • Si la cadena comienza con 0, entonces ECMAScript v3 permite una implementación de parseInt () para analizar los siguientes caracteres como números octales o hexadecimales.
  • Si la cadena comienza con un número del 1 al 9, parseInt () lo analizará como un entero decimal.

2. Gramática

parseInt (cadena, base)

parámetro descripción
cuerda Requerido. La cadena que se va a analizar.
base Opcional. Indica la base del número que se analizará. El valor está entre 2 ~ 36.

 3. Ejemplo:

//一个参数
parseInt("10");           // 10
parseInt("10.33");        // 10
parseInt("34 45 66");     // 34
parseInt(" 60 ");         // 60
parseInt("40 years");     // 40
parseInt("He was 40");    // NaN

//两个参数
parseInt('123', 8)        // 83   将'123'看作8进制数,返回十进制数83
parseInt("Hello", 8);     // NaN  根本就不是数值
parseInt("546", 2);       // NaN  除了“0、1”外,其它数字都不是有效二进制数字
parseInt("10",10);        // 10
parseInt("10",8);         // 8
parseInt("0x10");         // 16   将'0x10'看作16进制数,返回十进制数16
parseInt("10",16);        // 16   将'10'看作16进制数,返回十进制数16
parseInt("010");          // 10    注意:旧浏览器由于使用旧版本的ECMAScript(ECMAScript版本小于ECMAScript 5,当字符串以"0"开头时默认使用八进制,ECMAScript 5使用的是十进制),所以在解析("010") 将输出8。

Tres, encapsular el método js String.format ()

    var re = /%(?:(\d)?(\d)?(?:\.(\d+))?|\(([^)]+)\))([%bcdufosSxX])/g;

    var dispatch = function (data) {
        if (data.length == 1 && typeof data[0] == 'object') {
            data = data[0];
            return function (match, w, b, p, lbl, fmt, off, str) {
                return formats[fmt](data[lbl]);
            };
        } else {
            var idx = 0;
            return function (match, w, b, p, lbl, fmt, off, str) {
                return formats[fmt](data[idx++], p, w, b);
            };
        }
    };

    String.format = function () {
        var as = [].slice.call(arguments), fmt = as.shift()
        var s = "";
        for (var i = 0; i < arguments.length; i++) {
            s += arguments[i] + ",";
            if (i == 0) {
                fmt = arguments[0];
            } else {
                as[i - 1] = arguments[i];
            }
        }
        return fmt.replace(re, dispatch(as));
    }

    var formats = {
        '%': function (val) {
            return '%';
        },
        'b': function (val) {
            return parseInt(val, 10).toString(2);
        },
        'c': function (val) {
            return String.fromCharCode(parseInt(val, 10));
        },
        'd': function (val) {
            return parseInt(val, 10) ? parseInt(val, 10) : 0;
        },
        'u': function (val) {
            return Math.abs(val);
        },
        'f': function (val, p) {
            return (p > -1) ? Math.round(parseFloat(val) * Math.pow(10, p)) / Math.pow(10, p) : parseFloat(val);
        },
        'o': function (val) {
            return parseInt(val, 10).toString(8);
        },
        's': function (val) {
            return val;
        },
        'S': function (val, p) {
            var len = p - val.toString().length;
            for (i = 0; i < len; i++) val = '0' + val;
            return val;
        },
        //'x': function(val) { return ('' + parseInt(val, 10).toString(16)).toLowerCase(); },
        //'X': function(val) { return ('' + parseInt(val, 10).toString(16)).toUpperCase(); }

        'x': function (val, p, a, b) {
            var s = b ? new Array(b - 0 + 1).join(a || '') : '';
            s += parseInt(val, 10).toString(16);
            var ret = b ? s.slice(b * -1) : s;
            return ret.toLowerCase();
        },
        'X': function (val, p, a, b) {
            var s = b ? new Array(b - 0 + 1).join(a || '') : '';
            s += parseInt(val, 10).toString(16);
            var ret = b ? s.slice(b * -1) : s;
            return ret.toUpperCase();
        }
    };

transferir:

String.format("%02X", 10);  // "0A"       10进制转16进制

String.format("%d", 0x100); // "256"      16进制转10进制

String.format("%b", 100);   // "1100100"  10进制转2进制

String.format("%o", 100);   // "144"      10进制转8进制 

...

 

Supongo que te gusta

Origin blog.csdn.net/qq_40015157/article/details/113848745
Recomendado
Clasificación