回答編集履歴
3
追記
answer
CHANGED
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
File APIの仕様から一度削除されましたが、後方互換のために再導入されました。
|
|
11
11
|
FileReader.readAsArrayBuffer() の使用が推奨されています。
|
|
12
12
|
|
|
13
|
+
Wikipedia [コンピュータの数値表現](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E6%95%B0%E5%80%A4%E8%A1%A8%E7%8F%BE)(追記
|
|
13
14
|
|
|
14
15
|
> 再び 2進数
|
|
15
16
|
|
|
16
|
-
単位は``bit``になりますので、 テキスト化
|
|
17
|
+
2進数の単位は``bit``になりますので、 テキスト化された ``"0"``,``"1"`` の値はそれぞれ、16進数(単位は``byte``)の ``0x30``,``0x31`` になるはずです。
|
|
17
18
|
|
|
18
19
|
> 逆の動作
|
|
19
20
|
|
2
追記
answer
CHANGED
|
@@ -28,16 +28,28 @@
|
|
|
28
28
|
var bytes = hexstring.match(/[\da-f]{2}/ig)
|
|
29
29
|
.map( c => Number("0x"+c) ); // => バイト配列 / Uint8Array() に渡せる
|
|
30
30
|
|
|
31
|
+
/*
|
|
32
|
+
// 参考 binary-string : 1byte ごとに String.fromCharCode() で文字列化する
|
|
31
33
|
var binstr = bytes
|
|
32
34
|
.map( n => String.fromCharCode(n) )
|
|
33
35
|
.join(""); // => "Hello,world!" 現在は utf-8 テキストデータに限って利用
|
|
36
|
+
*/
|
|
34
37
|
|
|
35
38
|
var dataToSave = new Uint8Array( bytes );
|
|
36
39
|
```
|
|
37
40
|
|
|
38
41
|
データ形式が定まっていないバイナリの mimeType は ``application/octet-stream`` です。
|
|
39
42
|
* Blobの派生オブジェクト[File](https://developer.mozilla.org/ja/docs/Web/API/File/File) もあります
|
|
43
|
+
|
|
44
|
+
上記コードの続きで
|
|
40
45
|
```javascript
|
|
41
46
|
//var blob = new Blob([dataToSave], {type: "application/octet-binary"});
|
|
42
47
|
var file = new File([dataToSave], "filename", {type: "application/octet-stream"});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
[過去のご質問にも回答](https://teratail.com/questions/288289#reply-408769)していますが、``convertArrayBufferToHexArray()`` は、ArrayBufferから、通常の配列に変換(各バイトの値は HEXで示す2文字にする)しています。
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
// buf はfileから読んだ ArrayBuffer
|
|
54
|
+
var hexstring = convertArrayBufferToHexArray( buf ).join("");
|
|
43
55
|
```
|
1
追記
answer
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
FileReader.readAsArrayBuffer() の使用が推奨されています。
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
> 再び 2進数
|
|
15
15
|
|
|
16
16
|
単位は``bit``になりますので、 テキスト化すると、``0``,``1`` の値はそれぞれ、``byte``単位の ``0x30``,``0x31`` になるはずです。
|
|
17
17
|
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
HEX化したテキストの場合、byte単位(16進数)で考えます。
|
|
21
21
|
|
|
22
22
|
```javascript
|
|
23
|
+
// utf-8 1byte文字(可視文字)の範囲でHEX化してみる例(追記
|
|
23
24
|
// [..."Hello,world!"].map( s=>s.charCodeAt(0).toString(16) ).join("");
|
|
24
25
|
// => "48656c6c6f2c776f726c6421"
|
|
25
26
|
var hexstring = "48656c6c6f2c776f726c6421";
|