[Résolu] getBytes problème aléatoire
ancrou
Membre
Bonjour,
Quand je lis mon fichier avec un lecteur hexadécimal je lis :
Dans mon script je fais :
et j'ai dans la console :
D'où cela peut il venir ?
Quand je lis mon fichier avec un lecteur hexadécimal je lis :
BA 00 30 00 76 FF 8B FF A2 00 D3 FF AE FF
Dans mon script je fais :
<br />unsigned short val; <br />[data getBytes:&val range:NSMakeRange(loopL, 2)];<br />NSLog(@"val : %X loopL %d",val,loopL);<br />
et j'ai dans la console :
val : BA00 loopL 1
val : 30[size=10pt]FF[/size] loopL 3
val : 76FF loopL 5
val : 8B[size=10pt]00[/size] loopL 7
val : A2[size=10pt]FF[/size] loopL 9
val : D3FF loopL 11
val : AEFF loopL 13
D'où cela peut il venir ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
#import <Foundation/Foundation.h>
int main(int argc, char**argv){
NSAutoreleasePool * pool =[[NSAutoreleasePool alloc]init];
NSData * data=[NSData dataWithBytes:(unsigned char[14]){0xBA ,0, 0x30, 0, 0x76, 0xFF, 0x8B, 0xFF, 0xA2, 0, 0xD3, 0xFF, 0xAE, 0xFF} length:14] ;
NSInteger loopL;
for (loopL=0;loopL<14;loopL+=2){
unsigned short val;
[data getBytes:&val range:NSMakeRange(loopL, 2)];
val=Endian16_Swap(val);
NSLog(@val : %X loopL %d,val,loopL);
}
[pool drain];
return 0;
}
Résultat :
% gcc pgm.m -o pgm -framework Foundation
% pgm
2008-07-21 17:57:20.219 pgm[769:10b] val : BA00 loopL 0
2008-07-21 17:57:20.221 pgm[769:10b] val : 3000 loopL 2
2008-07-21 17:57:20.221 pgm[769:10b] val : 76FF loopL 4
2008-07-21 17:57:20.222 pgm[769:10b] val : 8BFF loopL 6
2008-07-21 17:57:20.222 pgm[769:10b] val : A200 loopL 8
2008-07-21 17:57:20.223 pgm[769:10b] val : D3FF loopL 10
2008-07-21 17:57:20.223 pgm[769:10b] val : AEFF loopL 12
%
J'ai comme l'impression que mon buffer est altéré et que mon problème ne vient pas de mon %x ou dataWithBytes ...
Maintenant, font que je remonte à la source du buffer
cela pourrai expliquer le problème ?
ça dépend en quoi tu cast ce void* derrière...
C'est pour ça que j'ai dit que %X prenait un int, car je supposais un problème de cast.
J'ai mes données dans un NSData.
Ces belles données, je les envoie à une bibliothèque C++
une fonction me retourne un bloc ces données
avec : const Uint16* ptr;
soit un pointeur de type short non-signé.
Avec ça j'initialise un NSData :
Déjà , est-ce que ".getSizeData()" ne renverrait pas plutôt le nombre de Uint16 au lieu du nombre de bytes ?
Pour le Size, c'est une autre histoire plus compliquée. Mais s'il est trop grand, j'aurai tout de même mes 1er valeur de bonne, non ?
Un NSLog(@%@",mesData);
me retourne
<[glow=red,2,300]00[/glow]ba0030 [glow=red,2,300]ff[/glow]76ff8b [glow=red,2,300]00[/glow]a2[glow=red,2,300]ff[/glow]d3 ffaeff50 [glow=red,2,300]00[/glow]6200c4 [glow=red,2,300]01[/glow]1e[glow=red,2,300]00[/glow]c2 00ba0030 [glow=red,2,300]ff[/glow]76ff8b ...
Ce qui est faux !
je devrais avoir :
BA 00 30 00 76 FF 8B FF A2 00 D3 FF AE FF 50 FF 62 00 C4 00 1E 01 C2 00 BA 00 30 00 76 FF 8B
Les paires sont tout simplement inversées.
Je devrais aller me coucher :-\\
Merci beaucoup