2013-06-21 61 views
1

我從WebService得到這個十六進制轉換十六進制轉換爲NSData的

http://www.moodpin.it/cms/listar_avatar?id=9

,並試圖轉換爲NSData的,設置的UIImageView,但它不工作

這裏是我的代碼:

NSData *dataImage = [appDelegate hexStringToData:avatar.avatar]; 
[imageView setImage:[UIImage imageWithData:dataImage]]; 

- (NSData *) hexStringToData:(NSString *) aString 
       { 
NSString *command = aString; 
command = [command stringByReplacingOccurrencesOfString:@" " withString:@""]; 
NSMutableData *commandToSend= [[NSMutableData alloc] init]; 
unsigned char whole_byte; 
char byte_chars[3] = {'\0','\0','\0'}; 
int i; 
for (i=0; i < [command length]/2; i++) { 
    byte_chars[0] = [command characterAtIndex:i*2]; 
    byte_chars[1] = [command characterAtIndex:i*2+1]; 
    whole_byte = strtol(byte_chars, NULL, 16); 
    [commandToSend appendBytes:&whole_byte length:1]; 
} 
NSLog(@"%@", commandToSend); 
return commandToSend; 
} 

回答

1

for (i=0; i < 8; i++) {

「不起作用」的含義很模糊。我的第一印象是,你只看到了前16個字節(每次迭代兩個字節),所以你顯然不會得到與輸入字符串相對應的數據塊。似乎應該使用字符串的長度來管理for循環。另外,如果字符串有奇數個字符,那麼您的代碼將有效地將一個0字符附加到十六進制字符串。

除了使代碼無法正常工作之外,您可能還會考慮另一種轉換方法。例如,除了對應於十六進制數字的字符(例如0..9,a..f和A..F),您可以創建一個填充了無效值(-1)的256個字符的查找表。例如,表中與這些字符對應的位置處的值將具有十六進制數字值,因此10的索引爲aA。這隻適用於特定的單字節字符編碼,如ASCII,但在這種情況下可能不是嚴格的限制。使用查找表可以快速找到每個十六進制數字的值,然後使用這些值作爲半字節來構建您的字節。

+0

當我將返回的NSData設置爲UIImage時,UIImage是零 – user2501387