字符串或者int转十六进制

//开始传输config文件
-(void)Qlife_sendConfigStart:(NSString *)fileData{
    //读取文件
    NSError *error = nil;
    NSString *str = [NSString stringWithContentsOfFile:fileData encoding:NSUTF8StringEncoding error:&error];
    if (error != nil) {
        NSLog(@"读取文件:%@", [error localizedDescription]);//将错误信息输出来
    }
    else{
        NSLog(@"读取文件:%@",str);
    }
    NSString *config;
    //1. 去除掉首尾的空白字符和换行字符
    config = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    //2. 去除掉其它位置的空白字符和换行字符
    config = [config stringByReplacingOccurrencesOfString:@"\r" withString:@""];
    config = [config stringByReplacingOccurrencesOfString:@"\n" withString:@""];
    config = [config stringByReplacingOccurrencesOfString:@"\t" withString:@""];
    config = [config stringByReplacingOccurrencesOfString:@" " withString:@""];// \s也是去空格
//    NSLog(@"config:%@",config);
    //    截取字符串
    NSString  *character1=[config substringWithRange:NSMakeRange(0,2)];
    NSString  *character2=[config substringWithRange:NSMakeRange(2,2)];
    NSString  *character3=[config substringWithRange:NSMakeRange(4,2)];
    NSString  *character4=[config substringWithRange:NSMakeRange(6,2)];
    NSString  *character5=[config substringWithRange:NSMakeRange(8,2)];
    NSString  *character6=[config substringWithRange:NSMakeRange(10,2)];
    NSString  *character7=[config substringWithRange:NSMakeRange(12,2)];
    NSString  *character8=[config substringWithRange:NSMakeRange(14,2)];
    
    //    //先以16为参数告诉strtoul字符串参数表示16进制数字,然后使用0x%X转为数字类型
    //    unsigned long red = strtoul([b UTF8String],0,16);
    //    //strtoul如果传入的字符开头是“0x”,那么第三个参数是0,也是会转为十六进制的,这样写也可以:
    //    unsigned long red = strtoul([@"0x6587" UTF8String],0,0);

    //    先以16为参数告诉strtoul字符串参数表示16进制数字,然后使用0x%X转为数字类型
    unsigned long supplement1 = strtoul([character1 UTF8String],0,16);
    unsigned long supplement2 = strtoul([character2 UTF8String],0,16);
    unsigned long supplement3 = strtoul([character3 UTF8String],0,16);
    unsigned long supplement4 = strtoul([character4 UTF8String],0,16);
    unsigned long supplement5 = strtoul([character5 UTF8String],0,16);
    unsigned long supplement6 = strtoul([character6 UTF8String],0,16);
    unsigned long supplement7 = strtoul([character7 UTF8String],0,16);
    unsigned long supplement8 = strtoul([character8 UTF8String],0,16);
    
    int i = 0;
    char dataArr[14] = {0x00};
    dataArr[i++] = 0x55;
    dataArr[i++] = 0xAA;
    dataArr[i++] = 0x0E;
    dataArr[i++] = 0x72;
    dataArr[i++] = supplement4;
    dataArr[i++] = supplement3;
    dataArr[i++] = supplement2;
    dataArr[i++] = supplement1;
    dataArr[i++] = supplement8;
    dataArr[i++] = supplement7;
    dataArr[i++] = supplement6;
    dataArr[i++] = supplement5;
//        dataArr[i++] = 0x55;
//        dataArr[i++] = 0xAA;
//        dataArr[i++] = 0x0E;
//        dataArr[i++] = 0x72;
//        dataArr[i++] = 0x7E;
//        dataArr[i++] = 0xFF;
//        dataArr[i++] = 0x7F;
//        dataArr[i++] = 0xFF;
//        dataArr[i++] = 0x00;
//        dataArr[i++] = 0xDC;
//        dataArr[i++] = 0x00;
//        dataArr[i++] = 0x00;
    //发送数据校验
    uint asrsum=0;
    for (int j=0; j<12;j++) {
        asrsum+=(dataArr[j]&0xff);//求数组值之和
    }
    char high=asrsum>>8;//当brightsum=[0,65025]时,当brightsum=[0x00,0xff*0xff]时
    char low=asrsum&0xff;//当brightsum=[0,65025]时,当brightsum=[0x00,0xff*0xff]时
    dataArr[i++] = high;
    dataArr[i++] = low;
    NSData *data_config = [NSData dataWithBytes:dataArr length:14];
//    NSLog(@"data_config:%@",data_config);
    _busy = YES;
    [self senddata:data_config];
}

 

posted on 2018-01-31 15:19  高彰  阅读(2807)  评论(0编辑  收藏  举报

导航