我想計算通過藍牙發送的消息的LRC。這裏是例如消息:在目標c中計算LRC
(該消息結構是STX消息FS EXT LRC)
02 1212004123422826E0B8C0F000F0A00182620000THYRON SYSTEMS沃特福德UKR 1C 03 60
STX = 02
MESSAGE = 1212004123422826E0B8C0F000F0A00182620000THYRON SYSTEMS WATFORD UKR
FS = 1C
EXT = 03
LRC = 60
我要做的是計算LRC通過執行除STX字符之外的通信消息中的每個字符的模2二進制和,但包括EXT字符。
之前計算LRC,我不得不這樣的NSString轉換成HexaString:使用
31323132 30303431 32333432 32383236 45304238 43304630 30304630 41303031 38323632 30303030 54485952 4f4e2053 59535445 4d532057 4154464f 52442055 4b521c03
方法:
- (NSString *) stringToHex:(NSString *)str
{
NSUInteger len = [str length];
unichar *chars = malloc(len * sizeof(unichar));
[str getCharacters:chars];
NSMutableString *hexString = [[NSMutableString alloc] init];
for(NSUInteger i = 0; i < len; i++)
{
[hexString appendFormat:@"%02x", chars[i]];
}
free(chars);
return [hexString autorelease];
}
然後我必須在字節數組中進行轉換。使用 方法:
- (NSData*) hexToBytes:(NSString *) hexaStr {
NSMutableData* data = [NSMutableData data];
int idx;
for (idx = 0; idx+2 <= hexaStr.length; idx+=2) {
NSRange range = NSMakeRange(idx, 2);
NSString * hexStrTmp = [hexaStr substringWithRange:range];
NSScanner* scanner = [NSScanner scannerWithString:hexStrTmp];
unsigned int intValue;
[scanner scanHexInt:&intValue];
[data appendBytes:&intValue length:1];
}
return data;
}
然後我嘗試做計算我LRC,這應該是60,有以下幾點:
- (void) calculateLRC:(NSString *) text {
NSData * data = [self hexToBytes:text];
NSUInteger size = [data length]/sizeof(const char);
const char * array = (const char*) [data bytes];
char checksum = 0;
for(uint32_t i = 0 ; i < size; i++) {
checksum += * array++;
}
NSLog(@"Checksum = %c", checksum);
self.LRC_Check = checksum;
}
的問題是,「校驗」有沒有價值「60 「 在裏面。有人可以幫我嗎?
Thanx提前!
我不不知道爲什麼,但我的「嗨,夥計們!」沒有出現在我的消息...對不起,我是一個有禮貌的傢伙;-) – Lelka
沒有會殺了你:) –