这段代码是如何将字符转为二进制并且去掉大于 255 个以外的字符的的

2021-03-25 07:11:34 +08:00
 quxinna

/**

2399 次点击
所在节点    JavaScript
10 条回复
lechain
2021-03-25 07:44:43 +08:00
兄弟,排版毁了🤣
kokutou
2021-03-25 08:13:45 +08:00
& 0xff 啊。。。
quxinna
2021-03-25 08:45:14 +08:00
@kokutou 0xff 不是一个字符吗
quxinna
2021-03-25 09:04:22 +08:00
@kokutou 哦你的意思是 js 去掉了 255 之外的编码而不是 255 之外个字符是吗
xinhochen
2021-03-25 09:07:51 +08:00
格式化一下再看:
function rstr2binl(input) {
var i;
var output = [] output[(input.length >> 2) - 1] = undefined;
for (i = 0; i < output.length; i += 1) {
output[i] = 0;
}
var length8 = input.length * 8;
for (i = 0; i < length8; i += 8) {
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;
}
return output;
}
quxinna
2021-03-25 09:38:47 +08:00
@kokutou 测试'我'这个字的 MD5 的 16815254531798dc21ee979d1d9c6675 是忽略 255 以后字节,
a31d0f25367ebe046897f8a939ca4a9f 是正确的吧
no1xsyzy
2021-03-25 11:18:48 +08:00
Characters >255 have their high-byte silently ignored.
大于 255 的字符的高位字节会被无声地忽略。
debuggerx
2021-03-25 12:18:33 +08:00
就是位运算
看看我下面这个记录应该会有些启发:
http://www.debuggerx.com/2020/11/11/learn-about-digitwise-operation/
quxinna
2021-03-26 15:40:16 +08:00
@no1xsyzy 猪这个字的 unicode 编码是 732A,2A 编码是*,按理说猪和*的 md5 的 blueimp javascript md5 编码应该一样,可是不一样啊
quxinna
2021-07-20 09:42:37 +08:00
@quxinna 猪是汉字,编码不是 ASCII,所以不可能一样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764840

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX