Foros del Web » Programando para Internet » Javascript »

Convertir Decimal a Hexadecimal

Estas en el tema de Convertir Decimal a Hexadecimal en el foro de Javascript en Foros del Web. Tengo un problema en un formulario tengo dos campos de texto, en el primero necesito capturar un numero de serie digital de 11 digitos y ...
  #1 (permalink)  
Antiguo 04/03/2005, 09:33
Avatar de Fabu_dina  
Fecha de Ingreso: enero-2004
Mensajes: 425
Antigüedad: 20 años, 3 meses
Puntos: 1
Exclamación Convertir Decimal a Hexadecimal

Tengo un problema en un formulario tengo dos campos de texto, en el primero necesito capturar un numero de serie digital de 11 digitos y convertirlo a hexadecimal el proceso seria de esta forma

hexadecimal=hexa(left(decimal,3)+hexa(resto del decimal 8)

quiero hacer una funcion que despues de salir de la edicion del decimal forzando a la captura de 11 digitos y numericos calcule el siguiente campo e introduzca su valor, he estado haciendo por varios metodos y no lo he conseguido , espero alguien me pueda ayudar con esto

Gracias!!!!
  #2 (permalink)  
Antiguo 04/03/2005, 15:40
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
Hola, Fabu_dina
Esta, copiada de un libro, funciona para números inferiores a 255, es decir, con dos dígitos hexadecimales; supongo que se podrá ampliar a tus números tan grandes averiguando primero cuántos dígitos hexadecimales puede alcanzar:
function toHex(dec)
{
var hexChars="0123456789ABCDEF"
if (dec > 255 ) { return null }
var i = dec % 16
var j = (dec-i) / 16
return "0X" + hexChars.charAt(j) + hexChars.charAt(i)
}
(así devuelve el hexadecimal en notación entendible por javascript, podría hacerse como un simple texto quitando el "0x")
__________________
Angel :cool:
  #3 (permalink)  
Antiguo 04/03/2005, 16:01
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
Hola de nuevo
Lo he logrado y funciona (verificado con la calculadora de Windows). Para cubrir hasta 11 dígitos decimales se necesitan 10 dígitos hexadecimales.
Código PHP:
function decAhex(dec)
{
    
dec parseInt(dec)
    var 
hexChars="0123456789ABCDEF"
    
var dig = new Array(10)
    if (
dec >= 1e12 ) { return 'demasiado grande' }
    for (
k=0k<10k++)
    {   
dig[k] = dec 16
        dec 
= (dec-dig[k]) / 16
    
}
    var 
resul ""
    
for (k=9k>-1k--)
    {    
resul += hexChars.charAt(dig[k])
    }    
    return 
resul

__________________
Angel :cool:

Última edición por angsanchez; 04/03/2005 a las 16:02
  #4 (permalink)  
Antiguo 04/03/2005, 16:03
Avatar de Fabu_dina  
Fecha de Ingreso: enero-2004
Mensajes: 425
Antigüedad: 20 años, 3 meses
Puntos: 1
Gracias
el problema es el siguiente que no es una conversion normal sino la conversion de dos segmentos es decir los primeros tres digitos conv. a hexa unidos como texto a los ocho restantes conv. a hexadecimal

A ver si me puedes ayudar con esto
  #5 (permalink)  
Antiguo 04/03/2005, 16:47
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
lo estaba haciendo mientras respondías

¡Epa! se me olvidó que no tienes 11 dígitos, sino 3 u 8.
Habrá que repartirlo. Son 3 y 7 dígitos hex, respectivamente. Es decir, he cambiado la función para que valga para todo tipo de número decimal, de cualquier tamaño:
Código PHP:
function decAhex(dec)
{    
dec ""+dec    //forzar texto
    
var hexChars="0123456789ABCDEF"
    
var nDigHex Math.ceildec.length/Math.log(16)*Math.LN10 )
    var 
dig = new Array(nDigHex)
    
dec parseInt(dec)    //ahora ya número
    
for (k=0k<nDigHexk++)
    {   
dig[k] = dec 16
        dec 
= (dec-dig[k]) / 16
    
}
    var 
resul ""
    
for (k=nDigHex-1k>-1k--)
    {    
resul += hexChars.charAt(dig[k])
    }    
    return 
resul

La puedes acomodar para tu caso así:
Sea "dato" tu texto inicial de 11 dígitos.
El resultado que quieres es
Código PHP:
resultado=decAhex(dato.substring(0,2))+decAhex(dato.substring(3)) 
(borra esos espacios que se cuelan en medio)
Creo que es correcto pero ¿tienes forma de verificarlo? Bueno, claro, a golpe de calculadora con varios ejemplos.
Suerte
__________________
Angel :cool:
  #6 (permalink)  
Antiguo 30/06/2005, 08:32
 
Fecha de Ingreso: enero-2002
Mensajes: 1.438
Antigüedad: 22 años, 3 meses
Puntos: 0
mirate de documentacion de parseint,

en el segundo parametro le puedes decir q te lo pase a headecimal.

You can use the optional radix argument to convert a binary number string to the decimal (base 10) equivalent.

Code:
document.write(parseInt("110", 2))

Output:
6

You can use the optional radix argument to convert a hexidecimal number string to the decimal (base 10) equivalent.

Code:
document.write(parseInt("0xD9", 16))

Output:
217
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 18:43.