V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
quxinna
V2EX  ›  JavaScript

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

  •  
  •   quxinna · 2021-03-25 07:11:34 +08:00 · 2361 次点击
    这是一个创建于 1090 天前的主题,其中的信息可能已经有所发展或是发生改变。

    /**

    • Convert a raw string to an array of little-endian words
    • Characters >255 have their high-byte silently ignored.
    • @param {string} input Raw input string
    • @returns {Array<number>} Array of little-endian words */ 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 }
    第 1 条附言  ·  2021-03-25 09:06:22 +08:00
    字符又是如何转为 32 位的二进制的呢
    10 条回复    2021-07-20 09:42:37 +08:00
    lechain
        1
    lechain  
       2021-03-25 07:44:43 +08:00 via Android
    兄弟,排版毁了🤣
    kokutou
        2
    kokutou  
       2021-03-25 08:13:45 +08:00 via Android   ❤️ 1
    & 0xff 啊。。。
    quxinna
        3
    quxinna  
    OP
       2021-03-25 08:45:14 +08:00 via Android
    @kokutou 0xff 不是一个字符吗
    quxinna
        4
    quxinna  
    OP
       2021-03-25 09:04:22 +08:00 via Android
    @kokutou 哦你的意思是 js 去掉了 255 之外的编码而不是 255 之外个字符是吗
    xinhochen
        5
    xinhochen  
       2021-03-25 09:07:51 +08:00   ❤️ 2
    格式化一下再看:
    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
        6
    quxinna  
    OP
       2021-03-25 09:38:47 +08:00 via Android
    @kokutou 测试'我'这个字的 MD5 的 16815254531798dc21ee979d1d9c6675 是忽略 255 以后字节,
    a31d0f25367ebe046897f8a939ca4a9f 是正确的吧
    no1xsyzy
        7
    no1xsyzy  
       2021-03-25 11:18:48 +08:00
    Characters >255 have their high-byte silently ignored.
    大于 255 的字符的高位字节会被无声地忽略。
    debuggerx
        8
    debuggerx  
       2021-03-25 12:18:33 +08:00 via Android
    就是位运算
    看看我下面这个记录应该会有些启发:
    http://www.debuggerx.com/2020/11/11/learn-about-digitwise-operation/
    quxinna
        9
    quxinna  
    OP
       2021-03-26 15:40:16 +08:00 via Android
    @no1xsyzy 猪这个字的 unicode 编码是 732A,2A 编码是*,按理说猪和*的 md5 的 blueimp javascript md5 编码应该一样,可是不一样啊
    quxinna
        10
    quxinna  
    OP
       2021-07-20 09:42:37 +08:00
    @quxinna 猪是汉字,编码不是 ASCII,所以不可能一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5495 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:43 · PVG 11:43 · LAX 20:43 · JFK 23:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.