Newsgroup: it.comp.lang.vo-clipper
Titolo: [VO]Funzione conversione carattere ASCI in BIT

In clipper avevo trovato una funzione che passandogli un carattere ascii mi
restituiva la sequenza di bit equivalente :
es "A" -> "00000001001001001001"   (sicuramente non è corretta)
purtroppo in vo sfogliando l'help non ho trovato nulla che gli assomigli.
Chi è così gentile da risolvere questa mia cecità
GRAZIE anticipatamente

Ciao Antonello,
se il risultato che desideri e' una stringa composta dai caratteri  "0" e
"1", che rappresentano la sequenza di bit per
un carattere,  un modo molto semplice e' quello di adottare una tabella di
conversione:
es una array di 256 elementi  {cod0,cod1,cod...n};
una tua funzione converte il carattere in posizione , e restituisce la
stringa contenuta dall'elemento.
Un altro metodo e' quello della conversione matematica da decimale a
binario.
Saluti
Mario Costantino



Puoi trovare tutto quello che ti serve nella  VO2Forum Library (free ) da cui ho
estratto la seguente funzione che, credo, risponde alla tua richiesta:
FUNCTION FT_Dec2Bin(x)
/*
 * File......: DECTOBIN.PRG
 * Author....: Greg Lief
 * CIS ID....: 72460,1760
 *
 * This function is an original work by Mr. Grump and is placed in the
 * public domain.
 *
//s Convert decimal to binary
//l FT_DEC2BIN( <nNum> ) -> cBinaryNumber;
//l This function can be used in conjunction with any bit-wise operations.
//p <nNum> is the numeric expression to be converted.
//r A character string representing <nNum> in binary format.
//e QOut( FT_DEC2BIN(255) )	// "11111111"
//e QOut( FT_DEC2BIN(2) )	// "00000010"
//g Conversion
LOCAL i, buffer := { '0', '0', '0', '0', '0', '0', '0', '0' }
FOR i = 8 TO 1 STEP -1
  IF x >= 2 ^ (i - 1)
     x -= 2 ^ (i - 1)
     buffer[9 - i] := '1'
  ENDIF
NEXT
RETURN ( buffer[1] + buffer[2] + buffer[3] + buffer[4] + ;
         buffer[5] + buffer[6] + buffer[7] + buffer[8] )
Ciao, Marino

Perdonate i numerosi errori sintattici....
Se mastichi un po' di "C" o ASM puoi fare un loop con una maschera AND con
confronti a bit sul valore 0x7F e valutare se il risultato e' uno oppure
zero. A fine ciclo uno SHIFT-LEFT del valore da convertire ed esamini il bit
successivo.
LPSTR word2binary ( WORD valore)
  {
    STATIC BYTE stringa[17];                // oppure 33 per i DWORD... N
bit + 1 per lo zero della stringa
    WORD c;
    for ( c=0;c<16;c++)                            // oppure c = 32 per le
DWORD
        {
        /* ho inserito la maschera come valore immediato perchč e' molto
piu' veloce di una varabile sullo stack
            se il vlore confrontato con la maschera ha risultato maggiore di
zero.... attribuisci a stringa il valore '1' altrimenti '0' */
        stringa[c] = if (valore & 0x7FFF >0; '1';  '0'); // oppure
0x7FFFFFFF per valori DWORD
        valore = valore<<1;                         // SHIFT LEFT
        }
    // in questo punto c dovrebbe essere uguale a 16....
    stringa [c] = 0x00;                             // byte zero per la
stringa
    return stringa;                            // ritorna stringa STATIC
definita nella funzione, il suo puntatore ovviamente
   }

 ha scritto nel messaggio
news:1usu3vgk5dfkn5dme...@4ax.com...
