我需要上传CSV文件并将其内容作为一系列0和1推送到终点。
示例:abc.csv ===> “01101000 01100101 01101100 01101100 01101111 ....”
当我尝试使用现有的FileReader.readAsBinaryString()时,console.log正在显示csv文件的文本。
例如
const reader = new FileReader();
reader.onload = evt => {
result = evt.target.result;
console.log(result);
};
reader.readAsBinaryString(file);
输出:以上传的csv文件的原始文本形式出现。
在此感谢任何帮助。
感谢。
答案 0 :(得分:0)
您可以使用bitwise operators将字节转换为位。使用AND运算符(单个'&'),您可以检查是否设置了位。以下代码是一个示例:
var bits = [
0x80, // 10000000
0x40, // 01000000
0x20, // 00100000
0x10, // 00010000
0x08, // 00001000
0x04, // 00000100
0x02, // 00000010
0x01 // 00000001
];
// convert 'true' or 'false' to '1' or '0'
function boolToBinary(b){
return (b) ? '1' : '0';
}
// convert a byte to a binary string
function byteToBinary(b){
var output = '';
for (var i = 0; i < 8; i++)
// check if bit 'i' is set
output += boolToBinary(b & bits[i]);
return output;
}
// convert a string to a binary string
function strToBinary(s){
if (!s) return '';
var output = '';
for (var i = 0; i < s.length; i++)
// use charCodeAt to convert a char to a byte: ('A' => 65)
output += byteToBinary(s.charCodeAt(i)) + ' ';
return output.slice(0, -1);
}
console.log(strToBinary('HALLO'));
for (var i = 1; i < 256; i*=2)
console.log(byteToBinary(i) + ' == ' + i);
控制台输出将是:
01001000 01000001 01001100 01001100 01001111
00000001 == 1
00000010 == 2
00000100 == 4
00001000 == 8
00010000 == 16
00100000 == 32
01000000 == 64
10000000 == 128
这似乎也是您的预期输出。
但是,请注意可能存在一些变化。上面的代码使用Little Endian,这意味着该字节是从右到左(例如在Windows中使用)。你也可以使用Big Endian。您应该匹配您的API。要将上面的代码转换为Big Endian,只需反转位数组(从低位开始,结束高位)。 另外,我编写了ASCII字符的代码,每个字符一个字节。 Unicode每个字符使用两个字节。对于Unicode;首先将charcode分成两个字节,如下所示:
function strToBinary(s){
if (!s) return '';
var output = '';
for (var i = 0; i < s.length; i++){
var charCode = s.charCodeAt(i);
var charCode_lo = charCode & 0x00FF;
var charCode_hi = (charCode & 0xFF00) >> 8;
output += byteToBinary(charCode_hi) + ' ';
output += byteToBinary(charCode_lo) + ' ';
}
return output.slice(0, -1);
}
再次,对于Big Endian,请切换输出顺序。