将十六进制字符串转换为字节数组
Converting a hexadecimal String to byte array
我的问题是:
如何成功使用Evernote API的方法getResourceByHash(...)
?
我做了什么:
我在笔记内容中得到了em-media的十六进制哈希:80ad525cd14de8f925487c02afc9ab21
然后我使用以下函数将十六进制String
转换为字节:
function hex2bin(hex){
var bytes = [];
for(var i=0; i< hex.length-1; i+=2) {
bytes.push(parseInt(hex.substr(i, 2), 16));
}
return String.fromCharCode.apply(String, bytes);
}
var bin = hex2bin("80ad525cd14de8f925487c02afc9ab21");
接下来,我以这种方式将变量应用于函数getResourceByHash(...)
:
noteStore.getResourceByHash(GUID, bin, true, true, true,
function(err,result){
console.log(err);
console.log(result);
}
);
但输出结果是:
{identifier: 'Resources', key: 'c280c2ad525cc3914dc3a8c3b925487c02c2afc389c2ab21'}
undefined
总而言之,我很困惑。
此外,您不能简单地将类型为 Integer
的值推送到字节数组。整数用 32 位(4 个字节)表示,因此您首先必须在逐个计算单个字节时"拆分"该数字:
intToByteArray = function(intToConvert) {
var byteArray = new Array(4)
for(var i = 0; i < byteArray.length; i++) {
var byte = intToConvert & 0xff;
byteArray[i] = byte;
intToConvert = (intToConvert - byte) / 256 ;
}
return byteArray;
};
来回转换演示(JS-小提琴)
代码行说明
首先,我们声明一个字节数组:
var byteArray = new Array(4)
阵列:[00000000
、00000000、00000000、00000000]通过使用按位
AND
运算符&
,我们"捕获"前 8 位,同时将结果值分配给一个新变量:var byte = intToConvert & 0xff;
我们的变量发生了什么:
intToConvert: 10101010 10101010 10101010 10101010
和"0xff":11111111 -------- -------- --------
结果: 10101010然后,我们将生成的单字节放入临时字节数组的实际索引中:
byteArray[i] = byte;
数组:[10101010, 00000000, 00000000
, 00000000]
现在,我们只需要减去刚刚添加到数组中的值并从整数变量中删除一个字节:
intToConvert = (intToConvert - byte) / 256 ;
2863311530 - 170 = 2863311360
2863311360/256 = 111848102863311360 => 10101010 10101010 10101010 00000000 11184810 => 10101010 10101010 10101010
继续此循环将逐个字节地从整数传输到临时字节数组。因此,我们将得到一个由 4 个单字节组成的字节数组,代表十六进制String
的一个整数或两个Character
。
如何将byte
转换为Integer
在这里得到了很好的解释。
因此,更新后的hex2bin(String)
应如下所示:
function hex2bin(hexString) {
var bytes = new Array(hexString.length / 2);
for(var i = 0; i < hexString.length-1; i+=2) {
bytes.push(
intToByteArray(
parseInt(hexString.substr(i, 2), 16)
)
);
}
StringBuilder sb = new StringBuilder(bytes.length * 8);
for(byte b : bytes) {
sb.append(Integer.toBinaryString((b & 0xFF) + 0x100).substring(1));
}
return sb.toString();
}
相关文章:
- 本地存储中的字符串到字节数组转换
- Javascript替换字节数组序列
- 如何在Javascript中存储字节数组
- JavaScript代码,用于在浏览器中显示字节数组中的PDF文件(非base64编码)
- 正在从字节数组加载图像内容
- Javascript + ActionScript:如何将从Actionscript返回的字节数组转换为Javascri
- 将十六进制字符串转换为字节数组
- 在javascript中将声音转换为字节数组
- 在 MVC3 中将字节数组显示为图像
- 如何在ASP.NET Response.BinaryWrite生成的Javascript中处理字节数组映像
- 在javascript中将字节数组转换为有符号的int64
- 如何使用Node.js将字节数组转换为字符串
- Yodlee获取Captcha的MFAR响应字节数组
- 使用PDF.JS和AngularJS从字节数组渲染PDF
- 如何在javascript中将字节数组转换为字符串
- 将字节数组保存到Titanium中的pdf文件中
- Node js从web获取图像并将其转换为字节值数组
- 如何读取二进制文件字节字节使用javascript
- 如何将多字节字符串数组转换为32位整型数组
- 如何将Javascript字符串转换为八位字节/字符数组