在 Safari 中执行此 JavaScript 代码
// expected output - array containing 32 bit words
b = "a";
var a = Array((b.length+3) >> 2);
for (var i = 0; i < b.length; i++) a[i>>2] |= (b.charCodeAt(i) << (24-(i & 3)*8));
和 iOS 模拟器中的这个 (Objective-)C 代码
int array[((@"a".length + 3) >> 2)];
for (int i = 0; i < @"a".length; i++) {
int c = (int) [@"a" characterAtIndex:i];
array[i>>2] |= (c << (24-((i & 3)*8)));
}
给我不同的输出 - 连续(JavaScript)1627389952和(Objective-C)1627748484。
由于前四位数字始终相同,我认为错误与精度有关,但我无法发现问题。
编辑
很抱歉缺乏关注,非常感谢你们(@Joni 和你们所有人)。你说得对,C 代码中的数组充满了一些随机值。我解决了将数组中的所有元素设置为零的问题:
memset(array, 0, sizeof(array));
如果有人好奇,C 代码现在看起来像这样:
int array[((@"a".length + 3) >> 2)];
memset(array, 0, sizeof(array));
for (int i = 0; i < @"a".length; i++) {
int c = (int) [@"a" characterAtIndex:i];
array[i>>2] |= (c << (24-((i & 3)*8)));
}