将 NSData 转换为 Base-64 错误
Convert NSData to Base-64 wrong
我将NSString 转换为字节数组。可以,那我把NSData转base64错了。如果“010203040506”是正确的但数字很大(考试:@“333435363738”)是错误的。这是我的代码。请帮我。
在 Android 中:ISIjJCUm 和 iOS:MzQ1Njc4。
NSString *command = @"333435363738";
NSMutableData *commandToSend= [[NSMutableData alloc] init];
unsigned long whole_byte;
char byte_chars[3] = {'[=10=]','[=10=]','[=10=]'};
int i;
for (i=0; i < [command length] /2; i++) {
NSLog(@"%d",[command characterAtIndex:i*2]);
NSLog(@"%d",[command characterAtIndex:i*2 + 1]);
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];
}
NSString *base64String;
if ([commandToSend respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
base64String = [commandToSend base64EncodedStringWithOptions:kNilOptions]; // iOS 7+
} else {
base64String = [commandToSend base64Encoding]; // pre iOS7
}
您的代码生成字符串 MzQ1Njc4
,它是字节 0x33
、0x34
、0x35
、0x36
、[=15 的 bas64 编码=]、0x38
。这似乎是代码的目的。
字符串ISIjJCUm
是0x21
、0x22
、0x23
、0x24
、0x25
、[=23的base64编码=].
请注意 0x21
是 33
十进制。所以看起来你要么打算在 iOS 上将字符串解释为十进制,要么在 Android.
上解释为十六进制
我将NSString 转换为字节数组。可以,那我把NSData转base64错了。如果“010203040506”是正确的但数字很大(考试:@“333435363738”)是错误的。这是我的代码。请帮我。
在 Android 中:ISIjJCUm 和 iOS:MzQ1Njc4。
NSString *command = @"333435363738";
NSMutableData *commandToSend= [[NSMutableData alloc] init];
unsigned long whole_byte;
char byte_chars[3] = {'[=10=]','[=10=]','[=10=]'};
int i;
for (i=0; i < [command length] /2; i++) {
NSLog(@"%d",[command characterAtIndex:i*2]);
NSLog(@"%d",[command characterAtIndex:i*2 + 1]);
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];
}
NSString *base64String;
if ([commandToSend respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
base64String = [commandToSend base64EncodedStringWithOptions:kNilOptions]; // iOS 7+
} else {
base64String = [commandToSend base64Encoding]; // pre iOS7
}
您的代码生成字符串 MzQ1Njc4
,它是字节 0x33
、0x34
、0x35
、0x36
、[=15 的 bas64 编码=]、0x38
。这似乎是代码的目的。
字符串ISIjJCUm
是0x21
、0x22
、0x23
、0x24
、0x25
、[=23的base64编码=].
请注意 0x21
是 33
十进制。所以看起来你要么打算在 iOS 上将字符串解释为十进制,要么在 Android.