質問するログイン新規登録

回答編集履歴

3

追記

2020/09/16 05:36

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

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``になりますので、 テキスト化すると、``0``,``1`` の値はそれぞれ、``byte``単位の ``0x30``,``0x31`` になるはずです。
17
+ 2進数の単位は``bit``になりますので、 テキスト化された ``"0"``,``"1"`` の値はそれぞれ、16進数(単位は``byte``の ``0x30``,``0x31`` になるはずです。
17
18
 
18
19
  > 逆の動作
19
20
 

2

追記

2020/09/16 05:35

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

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

追記

2020/09/12 02:28

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -11,7 +11,7 @@
11
11
  FileReader.readAsArrayBuffer() の使用が推奨されています。
12
12
 
13
13
 
14
- 再び 2進数
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";