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 · 86 天前 · 1565 次点击
    这是一个创建于 86 天前的主题,其中的信息可能已经有所发展或是发生改变。

    /**

    • 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 条附言  ·  85 天前
    字符又是如何转为 32 位的二进制的呢
    9 条回复    2021-03-26 15:40:16 +08:00
    lechain
        1
    lechain   86 天前 via Android
    兄弟,排版毁了🤣
    kokutou
        2
    kokutou   86 天前 via Android   ❤️ 1
    & 0xff 啊。。。
    quxinna
        3
    quxinna   85 天前 via Android
    @kokutou 0xff 不是一个字符吗
    quxinna
        4
    quxinna   85 天前 via Android
    @kokutou 哦你的意思是 js 去掉了 255 之外的编码而不是 255 之外个字符是吗
    xinhochen
        5
    xinhochen   85 天前   ❤️ 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   85 天前 via Android
    @kokutou 测试'我'这个字的 MD5 的 16815254531798dc21ee979d1d9c6675 是忽略 255 以后字节,
    a31d0f25367ebe046897f8a939ca4a9f 是正确的吧
    no1xsyzy
        7
    no1xsyzy   85 天前
    Characters >255 have their high-byte silently ignored.
    大于 255 的字符的高位字节会被无声地忽略。
    debuggerx
        8
    debuggerx   85 天前 via Android
    就是位运算
    看看我下面这个记录应该会有些启发:
    http://www.debuggerx.com/2020/11/11/learn-about-digitwise-operation/
    quxinna
        9
    quxinna   84 天前 via Android
    @no1xsyzy 猪这个字的 unicode 编码是 732A,2A 编码是*,按理说猪和*的 md5 的 blueimp javascript md5 编码应该一样,可是不一样啊
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1474 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 16ms · UTC 00:43 · PVG 08:43 · LAX 17:43 · JFK 20:43
    ♥ Do have faith in what you're doing.