检索String的字节在ObjC中返回的结果与Java不同

时间:2016-05-20 05:55:39

标签: java android ios objective-c mobile

我有一个字符串,我试图转换为字节,以便在ObjC和Java中创建md5哈希。由于某种原因,两种语言之间的字节不同。

爪哇

System.out.println(Arrays.toString(
("78b4a02fa139a2944f17b4edc22fb175:8907f3c4861140ad84e20c8e987eeae6").getBytes()));

输出:

[55, 56, 98, 52, 97, 48, 50, 102, 97, 49, 51, 57, 97, 50, 57, 52, 52, 102, 49, 55, 98, 52, 101, 100, 99, 50, 50, 102, 98, 49, 55, 53, 58, 56, 57, 48, 55, 102, 51, 99, 52, 56, 54, 49, 49, 52, 48, 97, 100, 56, 52, 101, 50, 48, 99, 56, 101, 57, 56, 55, 101, 101, 97, 101, 54]

ObjC

NSString *str = @"78b4a02fa139a2944f17b4edc22fb175:8907f3c4861140ad84e20c8e987eeae6";
NSData *bytes = [str dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:NO];
NSLog(@"%@", [bytes description]);

输出:

<37386234 61303266 61313339 61323934 34663137 62346564 63323266 62313735 3a383930 37663363 34383631 31343061 64383465 32306338 65393837 65656165 36>

我尝试过使用不同的字符集而没有运气,也无法想到字节不同的任何其他原因。有任何想法吗?我注意到所有的字节值都有18个因素不同,但我不确定是什么导致它。

2 个答案:

答案 0 :(得分:1)

实际上,Java是逐字节打印的。 Obj C以十六进制打印,整数除以整数。

参考此IDXGISwapChain::ResizeBuffers

mulsd xmm3,xmm1

你必须找到一种在Obj C中逐字节输出的方法。

我不知道Obj C,但是如果那个NSLog函数的工作方式类似于C中的printf(),那我就从那开始。

答案 1 :(得分:0)

来自Apple

的代码段
if(date('d/m/Y H:i:s') == '31/05/2016 00:00:00'){
    Const Service_tax_rate = 15%;
}

字节的变化可能是由于十六进制表示。上面的代码显示了如何将字符串转换为字节并将结果存储在缓冲区中。