Artigo Diretório
Tipo de dados JS
JS
É uma linguagem de digitação fraca. Seus tipos de dados incluem valores de string, valores numéricos, valores booleanos, matrizes e objetos. Embora nossos tipos numéricos incluam inteiros de ponto flutuante etc., eles são coletivamente referidos aqui 数值类型
. Ao mesmo tempo, JavaScript
tem um tipo dinâmico, sem especificar quando definimos o tipo de dados da variável. Isso também significa que nossa conversão forçada será inválida em JS.
Se o C/C++
pode ser alcançado pela memória de conversão ou complexo. Mas JavaScript
esses métodos são ineficazes (também, ou não sei como virar também cai).
IEEE754
É agora reconhecida como a operação de conversão de ponto flutuante padrão mais amplamente usada, por muitos CPU
usados pela unidade de ponto flutuante.
IEEEE475
Então, primeiro olhamos para IEEEE475
o Float
formato, existe 32bit
para armazenamento de dados, específico dividido da seguinte forma:
Aqui, tomamos 0x4128BC90
como exemplo para explicar:
0x4128BC90(H) = 01000001001010001011110010010000(B)
Sinal (bit de sinal)
0
Exibir número positivo1
Representa um número negativo
Expoente (bit expoente)
1000 0010(B) = 130 (D)
Significand (casas decimais)
01010001011110010010000(B) = 0*2^(-1) + 1*2^(-2) + ... + 0*2^(-23)
Fórmula de conversão
F un (x) = (- 1) S ign × (1 + S ignificand) × (2) E xponente - 127 Fun (x) = (-1) ^ {Sign} \ times (1 + Significand) \ times ( 2) ^ {Expoente - 127} F u n ( x )=( - 1 )S i g n×( 1+S i g n i f i c a n d )×( 2 )E x p o n e n t - 1 2 7
Método de conversão
var bytes = new Array();
bytes[0] = 65;
bytes[1] = 40;
bytes[2] = 188;
bytes[3] = 144;
//IEEE754
function hex2float(num) {
//符号位
var sign = (num & 0x80000000) ? -1 : 1;
//指数位
var exponent = ((num >> 23) & 0xff) - 127;
//尾数位
var mantissa = 1 + ((num & 0x7fffff) / 0x7fffff);
return sign * mantissa * Math.pow(2, exponent);
}
//拼接为number对象
var mfloat = ((bytes[0] & 0xFF) << 24) |
((bytes[1] & 0xFF) << 16) |
((bytes[2] & 0xFF) << 8) |
(bytes[3] & 0xFF);
console.log(hex2float(mfloat));
Ferramentas online
A seguir estão duas ferramentas online que eu pessoalmente recomendo que são muito adequadas para verificação:
Flutuante (IEEE754 precisão simples de 32 bits)
Conversor de base online_conversão de ponto flutuante
Referência obrigado
Convertendo hexadecimal em flutuante em javascript
Fundamentos de computador - conversão de números de ponto flutuante padrão IEEE754