nav*_*een 20 javascript hex numbers
这个问题让我问下面的问题.
我想将基数为10的数字转换为基数为16的数字.
var myno = 28.5;
var convno = myno.toString( 16 );
alert( convno );
Run Code Online (Sandbox Code Playgroud)
一切都很好.现在我想将它转换回十进制.
但现在我不能写
var orgno = parseInt( convno, 16 );
alert( orgno );
Run Code Online (Sandbox Code Playgroud)
因为它不返回小数部分.
并且不能使用parseFloat,因为根据MDC,parseFloat的语法是
parseFloat(str);
Run Code Online (Sandbox Code Playgroud)
如果我必须转换回int,那将不会是一个问题,因为parseInt语法是
parseInt(str [, radix]);
Run Code Online (Sandbox Code Playgroud)
那么有什么替代方案呢?
免责声明:我认为这是一个微不足道的问题,但谷歌搜索没有给我任何答案.
Ken*_*ent 13
另一种可能性是分别解析数字,将字符串分成两部分,并在转换过程中将两个部分视为整数,然后将它们重新组合在一起.
function parseFloat(str, radix)
{
var parts = str.split(".");
if ( parts.length > 1 )
{
return parseInt(parts[0], radix) + parseInt(parts[1], radix) / Math.pow(radix, parts[1].length);
}
return parseInt(parts[0], radix);
}
var myno = 28.4382;
var convno = myno.toString(16);
var f = parseFloat(convno, 16);
alert(myno + " -> " + convno + " -> " + f );
Run Code Online (Sandbox Code Playgroud)
请尝试这个:
function hex2dec(hex) {
hex = hex.split(/\./);
var len = hex[1].length;
hex[1] = parseInt(hex[1], 16);
hex[1] *= Math.pow(16, -len);
return parseInt(hex[0], 16) + hex[1];
}
Run Code Online (Sandbox Code Playgroud)
function hex2dec(hex) {
hex = hex.split(/\./);
var len = hex[1].length;
hex[1] = parseInt(hex[1], 16);
hex[1] *= Math.pow(16, -len);
return parseInt(hex[0], 16) + hex[1];
}
Run Code Online (Sandbox Code Playgroud)
function hex2dec(hex) {
hex = hex.split(/\./);
var len = hex[1].length;
hex[1] = parseInt(hex[1], 16);
hex[1] *= Math.pow(16, -len);
return parseInt(hex[0], 16) + hex[1];
}
// ----------
// TEST
// ----------
function calc(hex) {
let dec = hex2dec(hex);
msg.innerHTML = `dec: <b>${dec}</b><br>hex test: <b>${dec.toString(16)}</b>`
}
let init="bad.a55";
inp.value=init;
calc(init);Run Code Online (Sandbox Code Playgroud)
小智 5
尝试这个。
该字符串可以是具有四个字符 (0 - 255) 的原始数据(简单文本)或长度为四个字节的十六进制字符串“0xFFFFFFFF”。
var str = '0x3F160008';
function parseFloat(str) {
var float = 0, sign, order, mantissa, exp,
int = 0, multi = 1;
if (/^0x/.exec(str)) {
int = parseInt(str, 16);
}
else {
for (var i = str.length -1; i >=0; i -= 1) {
if (str.charCodeAt(i) > 255) {
console.log('Wrong string parameter');
return false;
}
int += str.charCodeAt(i) * multi;
multi *= 256;
}
}
sign = (int >>> 31) ? -1 : 1;
exp = (int >>> 23 & 0xff) - 127;
mantissa = ((int & 0x7fffff) + 0x800000).toString(2);
for (i=0; i<mantissa.length; i+=1) {
float += parseInt(mantissa[i]) ? Math.pow(2, exp) : 0;
exp--;
}
return float*sign;
}
Run Code Online (Sandbox Code Playgroud)