Newsgroup: it.comp.lang.visual-basic
Titolo: [?] HEX <> BIN HELP

AIUTOOOO e ringrazio!
Sto tribulando da qualche giorno:
Ho queste 4 funzioni che mi trasformano un numero HEX in DECIMALE  e
viceversa ma che non riesco a tradurre in VB6 e sicuramente mi sto perdendo
in un bicchiere d'acqua.
A parte i due controlli iniziali di di verifca stringa e numero che piů o
meno ho realizzato, le due funzioni finali non le capisco molto e qui mi
blocco...Qualche consiglio... MOLTE GRAZIE!
Esempio 1 variabili e risultato ottenuto:
Hexa= 0C
Risultato= 151
--------------------------------------------------------------------------
Esempio 2 variabili e risultato ottenuto:
Hexa= FF
Risultato= 883
--------------------------------------------------------------------------
var hexaDigit = "0123456789abcdef";
function checkDecimal(number)
{
var ch;
    if((number == null) || (number.length==0))
 {
        return false;
 }
    for(var i=0; i<number.length; i++)
    {
  ch = number.substring(i, i+1);
        if((ch < "0" || ch > "9"))
  {
   return false;
  }
    }
    return true;
}
function checkHexa(number)
{
var ch;
    if((number == null) || (number.length==0))
 {
        return false;
 }
    for(var i=0; i<number.length; i++)
    {
  ch = number.substring(i, i+1);
        if(hexaDigit.indexOf(ch.toLowerCase()) == -1)
  {
   return false;
  }
    }
    return true;
}
function hex(input, nb)
{
var output = "";
    while(input > 0)
    {
        output = hexaDigit.charAt(input & 0xf) + output
        input >>= 4;
    }
    while(output.length < nb)
    {
        output = "0" + output;
    }
    return output;
}
function error(arg1, arg2)
{
    arg1.value = "Err";
    arg2.value = "Err";
    arg1.focus();
    arg1.select();
    return "ERR"
}
function computeMac(hexa)
{
var mac = hexa.form.mac;
    if(
  (hexa.value.length != 2)
 ||
  !checkHexa(hexa.value)
   )
    {
        return error(hexa, mac);
    }
    i = parseInt(hexa.value, 16);
    i <<= 8;
    if(i & 0x8000) i+= 0x20;
    if(i & 0x0800) i+= 0x10;
    i &= 0x7730;
    i += 0x1100;
    mac.value = hex(i, 4);
    return "";
}
function computeHex(mac,1)
{
var hexa = mac.form.hex;
var i;
    if(
  (mac.value.length != 4)
 ||
  !checkDecimal(mac.value)
   )
    {
        return error(mac, hexa);
    }
    i = parseInt(mac.value, 16);
    if(
     ((i & 0xff00) == 0)
 ||
     ((i & 0xff00) > 0x8800)
 ||
     ((i & 0xf0) > 0x30)
 ||
  ((i & 0xf) != 1)
   )
 {
  return error(mac, hexa);
 }
    i -= 0x1100;
    i |= ((i & 0x20) << 10);
    i |= ((i & 0x10) << 7);
    i >>= 8;
    hexa.value = hex(i, 2);
    return "";
}


Non ho capito cosa c'entra il BIN nel subject, comunque, perchè non usi
quelle già fatte di VB?
Decimal = Val("&HABC")
Hexa = Hex$(128)
Ciao

 quelle gią fatte di VB?


 come dalla formula ricavata dal tabulato fatta in java.
ma scusa... tu cerchi di riprodurre i dati dell'esempio ?!? hai ragione che
non ti vengono... sono sbagliati!
Hex 0C -> 12 Dec
Hex FF -> 255 Dec
ciao!
Marco Trapanese

 Hex FF -> 255 Dec
Ciao Marco,
grazie dell'info.
Appunto mi riferisco alla formula e alle funzioni trascritte che ho messo
nel messaggio iniziale e che purtroppo non riesco a riprodurre in VB6.
In pratica riecco l'estratto delle due funzioni:
function computeMac(hexa)
{
var mac = hexa.form.mac;
    if(
  (hexa.value.length != 2)
 ||
  !checkHexa(hexa.value)
   )
    {
        return error(hexa, mac);
    }
    i = parseInt(hexa.value, 16);
    i <<= 8;
    if(i & 0x8000) i+= 0x20;
    if(i & 0x0800) i+= 0x10;
    i &= 0x7730;
    i += 0x1100;
    mac.value = hex(i, 4);
    return "";
}
----
e questo al contrario
----
function computeHex(mac,1)
{
var hexa = mac.form.hex;
var i;
    if(
  (mac.value.length != 4)
 ||
  !checkDecimal(mac.value)
   )
    {
        return error(mac, hexa);
    }
    i = parseInt(mac.value, 16);
    if(
     ((i & 0xff00) == 0)
 ||
     ((i & 0xff00) > 0x8800)
 ||
     ((i & 0xf0) > 0x30)
 ||
  ((i & 0xf) != 1)
   )
 {
  return error(mac, hexa);
 }
    i -= 0x1100;
    i |= ((i & 0x20) << 10);
    i |= ((i & 0x10) << 7);
    i >>= 8;
    hexa.value = hex(i, 2);
    return "";
}
Io non sono ancora riuscito...
GRAZIE!
Franco