2014-11-27 2 views
0

사용자가 텍스트 상자에 0에서 5000 사이의 값을 입력합니다. 내 필요는 dataToSend의 바이트 4와 5를 텍스트 상자의 16 진수 값으로 대체하는 것입니다. 예를 들어, 사용자가 250을 입력하면이를 00FA로 변환합니다. dataToSend에서 0x03을 0x00으로, 0xEB를 0xFA로 바꿉니다. str과 str2가 거기에 있으므로 데이터를 볼 수 있습니다. 그 (것)들 사이 다름이 있고, 나는 어느 것이 정확하다는 것을 모른다.NSData의 바이트를 16 진수 값으로 바꿉니다.

- (IBAction)handleConfig1DelayMoveChange:(id)sender 
    { 
    NSString *tmp; 
    int value; 
    tmp = [txtDelayBeforeMove1 stringValue]; 
    NSString *hex = [NSString stringWithFormat:@"0x%04lX",(unsigned long)[tmp integerValue]]; 
    NSString *hex1 = [NSString stringWithFormat:@"%04lX",(unsigned long)[tmp integerValue]]; 
    dataToSend = [NSMutableData dataWithBytes:&((char[6]){0x51,0x04,0x02,0x03,0xEB,0x0D}) length:6]; 
    NSString *str = [[NSString alloc] initWithData:dataToSend encoding:NSASCIIStringEncoding]; 
    NSString *str2 = [NSString stringWithFormat:@"%.*s", [dataToSend length], [dataToSend bytes]]; 
    tmp = @""; 
    tmp = [hex1 substringWithRange:NSMakeRange(1,2)]; 
    value = [tmp intValue]; 
    [dataToSend replaceBytesInRange: NSMakeRange(3,1) withBytes: &value]; 
    str2 = [NSString stringWithFormat:@"%.*s", [dataToSend length], [dataToSend bytes]]; 
} 

답변

0

이것은 작동합니다. 개선을위한 의견 및 제안은 환영합니다. displayhexStr은 디버깅 중 변경 사항을 확인하는 데 사용되었습니다.

- (IBAction)handleConfig1DelayMoveChange:(id)sender 
    { 
    NSString *tmp; 
    int i; 
    if([txtDelayBeforeMove1 intValue] < 0 || [txtDelayBeforeMove1 intValue] > 5000) 
    { 
     [self showAlert:@"Value must be between 0 and 5000"]; 
     return; 
    } 
    tmp = [txtDelayBeforeMove1 stringValue]; 
    NSString *hex1 = [NSString stringWithFormat:@"%04lX",(unsigned long)[tmp integerValue]]; 
    dataToSend = [NSMutableData dataWithBytes:&((char[6]){0x51,0x04,0x02,0x03,0xEB,0x0D}) length:6]; 
    NSMutableString *displayhexStr = 
    [NSMutableString stringWithCapacity:[dataToSend length]*2]; 
    for (i = 0; i < [dataToSend length]; i++) { 
     [displayhexStr appendFormat:@"%02x ", dbytes[i]]; 
    } 
    tmp = [hex1 substringWithRange:NSMakeRange(0,2)]; 
    NSScanner* scanner = [NSScanner scannerWithString:tmp]; 
    unsigned int intValue; 
    [scanner scanHexInt:&intValue]; 
    unsigned char uc = (unsigned char) intValue; 
    [dataToSend replaceBytesInRange: NSMakeRange(3,1) withBytes: &uc]; 
    displayhexStr = [NSMutableString stringWithCapacity:[dataToSend length]*2]; 
    for (i = 0; i < [dataToSend length]; i++) 
    { 
     [displayhexStr appendFormat:@"%02X ", dbytes[i]]; 
    } 
    tmp = [hex1 substringWithRange:NSMakeRange(2,2)]; 
    scanner = [NSScanner scannerWithString:tmp]; 
    [scanner scanHexInt:&intValue]; 
    uc = (unsigned char) intValue; 
    [dataToSend replaceBytesInRange: NSMakeRange(4,1) withBytes: &uc]; 
    displayhexStr = [NSMutableString stringWithCapacity:[dataToSend length]*2]; 
    for (i = 0; i < [dataToSend length]; i++) 
    { 
     [displayhexStr appendFormat:@"%02X ", dbytes[i]]; 
    } 
    [self send]; 
} 
관련 문제