Et logique bit a bit

FabulousF Messages postés 8 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 7 mai 2006 - 6 mai 2006 à 22:46
FabulousF Messages postés 8 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 7 mai 2006 - 7 mai 2006 à 10:37
Re-bonsoir :)

nouveau petit souci :)

dans ma fonction C j'ai une fonction qui prend en paramètre un "unsigned char *" et un entier

en VB j'ai donc converti le unsigned char * en "ByRef Byte()" .. l'entier en Integer

à un moment dans ma fonction C j'ai ceci, un et logique bit à bit (je pense que c'est ça, si c'est pas le cas n'hésitez pas à me le dire :D ) :
if inbuf[0]&0x01 ...

en VB j'ai mis ça en If (inbuf(0) And valByte) ...

Où valByte est la conversion hexa -> byte de "0x01" effectué grâce aux fonctions trouvée ici -même sur vbfrance : http://www.vbfrance.com/codes/CONVERSION-BYTE-STRING-HEXA-DECIMAL_28355.aspx

or j'ai le droit à une erreur détectée par VB 2005 sur inbuf(0) And valByte :

L'opérateur And n'est pas défini pour les type Byte et Tableau à 1 Dimension de Byte

si quelqu'un peut m'aider, merci :)

2 réponses

cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006
7 mai 2006 à 10:07
slt

inbuf est un tableau de byte ?
si oui, ben, donne une plus grande partie du code, parce que ca marche tres bien chez moi.

tu es bien VB6 ou .NET ?

+
0
FabulousF Messages postés 8 Date d'inscription vendredi 18 février 2005 Statut Membre Dernière intervention 7 mai 2006
7 mai 2006 à 10:37
voilà la fonction complète :)

<meta http-equiv= "Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Kate, the KDE Advanced Text Editor">

unsigned char *uncompress_data(unsigned char *inbuf,int *buflen)
{
unsigned char *outbuf;
unsigned char packcode;
int a,b,c,len,offset;
int inlen,outlen,inpos,outpos;

/* length of data */
inlen =*buflen;
outlen= (inbuf[2]<<16)+(inbuf[3]<<8)+inbuf[4];
outbuf=malloc(outlen);
if (outbuf == NULL) { printf("Insufficient memory.\n"); abort(); }


<hr size="2" width="100%">
/* position in file */
if (inbuf[0]&0x01) inpos=8; else inpos =5;
outpos= 0;

Ici j'ai donc fait en VB :

Dim valByte() As Byte
hextobyte("0x01",valByte)
If (inbuf(0) And valByte) Then ....

sachant que comme inbuf est dans le code C en unsigned char *, je l'ai mis en paramètre de ma fonction en ByRef inbuf() As Byte

<hr size ="2" width= "100%">
/* main decoding loop */
while ((inpos0xFC))
{
packcode =inbuf[inpos];
a= inbuf[inpos+1];
b=inbuf[inpos+2];

if (!(packcode&0x80)) {
len =packcode&3;
mmemcpy(outbuf+outpos,inbuf+inpos+2,len);
inpos+= len+2;
outpos+=len;
len=((packcode&0x1c)>>2)+3;
offset=((packcode>>5)<<8)+a+1;
mmemcpy(outbuf+outpos,outbuf+outpos-offset,len);
outpos+=len;
}
else if (!(packcode&0x40)) {
len =(a>>6)&3;
mmemcpy(outbuf+outpos,inbuf+inpos+3,len);
inpos+= len+3;
outpos+=len;
len=(packcode&0x3f)+4;
offset=(a&0x3f)*256+b+1;
mmemcpy(outbuf+outpos,outbuf+outpos-offset,len);
outpos+=len;
}
else if (!(packcode&0x20)) {
c =inbuf[inpos+3];
len= packcode&3;
mmemcpy(outbuf+outpos,inbuf+inpos+4,len);
inpos+=len+4;
outpos+=len;
len=((packcode>>2)&3)*256+c+5;
offset=((packcode&0x10)<<12)+256*a+b+1;
mmemcpy(outbuf+outpos,outbuf+outpos-offset,len);
outpos+=len;
}
else {
len =(packcode&0x1f)*4+4;
mmemcpy(outbuf+outpos,inbuf+inpos+1,len);
inpos+= len+1;
outpos+=len;
}
}

/* trailing bytes */
if ((inpos1,inbuf[inpos]&3);
outpos+ =inbuf[inpos]&3;
}

if (outpos!=outlen) printf("Warning: bad length ? %d instead of %d\n",outpos,outlen);
*buflen=outlen;
return outbuf;
}
0
Rejoignez-nous