JavaScript 中的 Base 64 编码
base 64 encoding in javascript
下面是我从Philippe Tenenhaus(http://www.philten.com/us-xmlhttprequest-image/(那里得到的base 64图像编码函数。
这对我来说很困惑,但我很想理解。
我想我理解按位 & 和 | ,以及使用 <<和>> 在字节位置移动。
我对这些行特别困惑: ((字节 1 和 3( <<4( |(字节 2>> 4(; ((字节2和15( <<2( |(字节 3>> 6(;
以及为什么它仍然使用 byte1 表示 enc2,使用 byte2 表示 enc3。而enc4 = byte3 & 63;
的目的...
有人可以解释这个功能吗?
function base64Encode(inputStr)
{
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var outputStr = "";
var i = 0;
while (i < inputStr.length)
{
//all three "& 0xff" added below are there to fix a known bug
//with bytes returned by xhr.responseText
var byte1 = inputStr.charCodeAt(i++) & 0xff;
var byte2 = inputStr.charCodeAt(i++) & 0xff;
var byte3 = inputStr.charCodeAt(i++) & 0xff;
var enc1 = byte1 >> 2;
var enc2 = ((byte1 & 3) << 4) | (byte2 >> 4);
var enc3, enc4;
if (isNaN(byte2))
{
enc3 = enc4 = 64;
}
else
{
enc3 = ((byte2 & 15) << 2) | (byte3 >> 6);
if (isNaN(byte3))
{
enc4 = 64;
}
else
{
enc4 = byte3 & 63;
}
}
outputStr += b64.charAt(enc1) + b64.charAt(enc2) + b64.charAt(enc3) + b64.charAt(enc4);
}
return outputStr;
}
它可能有助于理解 Base64 编码的作用。它将 8 位分组中的 24 位转换为 6 位分组。(http://en.wikipedia.org/wiki/Base64(
所以 enc1,是第一个 6 位,它是第一个字节的前 6 位。
enc2 是下一个 6 位,第一个字节的最后 2 位和第二个字节的前 4 位。按位和操作 byte1 和 3 针对第一个字节中的最后 2 位。所以
XXXXXXXXX & 00000011 = 000000XX
然后向左移动 4 位。
000000XX <<4 = 00XX0000。
byte2>> 4 执行右位移位,隔离第二个字节的前 4 位,如下所示
YYYYXXXX>> 4 = 0000YYYY
所以,((字节1和3(<<4(|(字节 2>> 4( 将结果与按位或
00XX0000 | 0000YYYY = 00XXYYYY
enc3,是第二个字节的最后 4 位和第 3 个字节的前 2 位。
enc4 是第 3 个字节的最后 6 位。
charCodeAt 返回一个 Unicode 代码点,这是一个 16 位值,因此似乎假设相关信息仅在低 8 位中。这个假设让我想知道代码中是否仍然存在错误。由于这种假设,可能会丢失一些信息。
- 将地理编码结果转换为php变量以发布到mysql数据库
- Json在完整日历中对数据进行了编码
- 我将如何将Base的原型分配给User
- 如何对每个用户每天只允许单击一次的按钮进行编码
- Javascript字符集编码
- 如何在javascript转换编码中将一个动态值从一个表单添加到另一个页面
- base64编码的图像比intranet中的常规图像好吗
- 我不知道我的编码有什么问题.(JavaScript)
- 为什么字符编码对URL很重要
- 如何在做PHP时在base64中动态编码;preg_ replace”;
- 如何将JSON编码的PHP数组发送到同一页面上的数据表
- 如何使Jquery编码的动态下拉菜单与PHP GET变量协调工作
- JavaScript代码,用于在浏览器中显示字节数组中的PDF文件(非base64编码)
- 以HTML文件中的编码形式脱机存储图像
- HTML Playing Base 64编码音频,带angularJS,错误:[$interpole:nooncat]
- JavaScript 中的 Base 64 编码
- Base 64 编码或二进制
- 获取base 64编码字符串作为变量
- 使用JavaScript将base 64编码的数据转换为二进制数据
- 如何检测“onload”用于base-64编码的webfonts