Jer*_*ner 1 javascript binarystream angularjs uint8t
我从 HTTP 请求接收到以下二进制流:
HTTP请求
Document.get({id: $scope.documentId}, function(stream){
});
Run Code Online (Sandbox Code Playgroud)
角工厂
.factory('Document', ['$resource', 'DOCUMENTS_CONFIG',
function($resource, DOCUMENTS_CONFIG) {
return $resource(DOCUMENTS_CONFIG.DETAIL_URL, {}, {
get: {
method: 'GET',
params: {},
url: DOCUMENTS_CONFIG.DETAIL_URL,
isArray: false
}
});
}
]);
Run Code Online (Sandbox Code Playgroud)
回复

控制台.log(流)
我需要将其转换为 Uint8Array。我尝试将其转换为 bas64
// Convert Binary Stream To String
var dataString = JSON.stringify(stream);
// Convert to Base 64 Data
var base64Data = window.btoa(unescape(encodeURIComponent(dataString)));
Run Code Online (Sandbox Code Playgroud)
当我运行此命令时,我收到错误“格式错误的 uri 异常”。我也尝试过 window.btoa(dataString) 但出现“无法在“Window”上执行“btoa”:要编码的字符串包含 Latin1 范围之外的字符”。
我怎样才能将其转换为 Uint8Array?
所以你有一个二进制流(我假设这些值是从某种字节数组发送的,0-255)。在将window.btoa(...)其转换为Uint8Array.
您只需迭代索引Object's(存储在从 0 开始递增的键值中)并设置 Uint8Array 的值,获取每个索引处的字符代码,并将该索引处的 Uin8Array 单元格设置为该值。
您需要知道密钥的数量,这可以通过 实现Object.keys(stream).length。然后,我们迭代键值 ( i) 并获取charCode(0)零处的值(因为每个键的值都是 1 个字符的字符串)。
var bytes = Object.keys(stream).length;
var myArr = new Uint8Array(bytes)
for(var i = 0; i < bytes; i++){
myArr[i] = stream[i].charCodeAt(0);
}
Run Code Online (Sandbox Code Playgroud)
我更新了你的小提琴,你可以在控制台中记录它是如何转换的。我还截断了字符串,因为我厌倦了查找所有'字符并尝试转义它们并添加\n字符,以便所有字符都在一行上。
| 归档时间: |
|
| 查看次数: |
9529 次 |
| 最近记录: |