// ViewController.m// 書き込みテスト用のメソッド-(IBAction)writeDataTestMethod:(id)sender{// ① majorの値を4661に設定NSIntegerwriteInt=4661;// ② 10進数を16進数に変換して文字列にするNSString*witeString=[NSStringstringWithFormat:@"%lX",(long)writeInt];// ③ 16進数のNSString型をNSData型に変換する処理NSData*writeData=[witeStringdataFromHexString];NSLog(@"writeData: %@",writeData);// ④ データの書込み処理[self.connectedPeripheralwriteValue:writeDataforCharacteristic:self.majorChartype:CBCharacteristicWriteWithResponse];}
上記メソッドの説明をします。
まず、majorの値を4661に変更したいとします。
【処理の順番】
① ユーザが入力する際には当然、10進数の値で考えると思うので、初めの入力値は 10進数 の4661とします。
② 次にREBL600FRが理解できるように16進数に変換する必要があります。
『NSInteger型かつ10進数』で表された4661を『NSString型かつ16進数』の値に変換します。
③ 書換えたい値をREBL600FRに送るためにNSData型に変換します。
④ 書込みたいデータが用意できたので、書込み処理を実行します。 self.majorCharには予め、major値のキャラクタリスティックを保持しています。
// NSString+Conversion.h#import <Foundation/Foundation.h>@interfaceNSString(NSString_Conversion)#pragma mark - Data Conversion-(NSData*)dataFromHexString;@end
12345678910111213141516171819202122232425
// NSString+Conversion.m#import "NSString+Conversion.h"@implementationNSString(NSString_Conversion)#pragma mark - Data Conversion-(NSData*)dataFromHexString{constchar*chars=[selfUTF8String];NSUIntegeri=0,len=self.length;NSMutableData*data=[NSMutableDatadataWithCapacity:len/2];charbyteChars[3]={'\0','\0','\0'};unsignedlongwholeByte;while(i<len){byteChars[0]=chars[i++];byteChars[1]=chars[i++];wholeByte=strtoul(byteChars,NULL,16);[dataappendBytes:&wholeBytelength:1];}returndata;}@end