У меня есть строка, которую я пытаюсь преобразовать в байты, чтобы создать хеш-память md5 как в ObjC, так и в Java. По некоторым причинам байты различаются между двумя языками.Извлечение байтов строки возвращает разные результаты в ObjC, чем Java
Java
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 раз, но я не уверен, что вызывает его.
Я знал, что это должно быть что-то в этом роде. Поэтому, когда я создаю хэш-файл md5, вы говорите, что оба они должны быть созданы из десятичного или шестнадцатеричного значения и не должны отличаться между двумя языками? – Geoff
Я не могу сказать об ObjC, но функция Java 'Arrays.toString()' работает, преобразовывая последовательность байтов в десятичные числа и печатая массив из них. Какой из двух выходов предназначен для вас? Измените другое в соответствии с этим. – cst1992