回答編集履歴
3
追記
answer
CHANGED
@@ -6,6 +6,9 @@
|
|
6
6
|
256 = 0x100
|
7
7
|
```
|
8
8
|
|
9
|
+
10進数: 12と34を入力して1234を出力する時は`12 * 100 + 34 * 1`
|
10
|
+
16進数: 0xABと0xCDを入力して0xABCDを出力する時も同様に`0xAB * 0x100 + 0xCD * 1`
|
11
|
+
|
9
12
|
> Q2)intをGetBytesすると、なぜ4つずつの組の配列になるのか?
|
10
13
|
|
11
14
|
[C#のint](https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/int)が32bit = 4byteだから
|
@@ -14,6 +17,26 @@
|
|
14
17
|
|
15
18
|
1byte分の入力しか入れてないから
|
16
19
|
|
20
|
+
```
|
21
|
+
byte[] size1 = BitConverter.GetBytes(size / 16777216);
|
22
|
+
byte[] size2 = BitConverter.GetBytes(size % 16777216 / 65536);
|
23
|
+
byte[] size3 = BitConverter.GetBytes(size % 16777216 % 65536 / 256);
|
24
|
+
byte[] size4 = BitConverter.GetBytes(size % 16777216 % 65536 % 256);
|
25
|
+
```
|
26
|
+
|
27
|
+
32bitの変数sizeに対して0x1000000で割ると、出て来る数は-128~+127
|
28
|
+
|
29
|
+
`size % 16777216` これは上位8bitを削って下位24bitを出してるのでそこから2の16乗で割ると出て来る数は-128~+127
|
30
|
+
以下同様
|
31
|
+
|
32
|
+
削ぎ落とさずに
|
33
|
+
|
34
|
+
```
|
35
|
+
byte[] le_size = BitConverter.GetBytes(size);
|
36
|
+
```
|
37
|
+
|
38
|
+
でよい
|
39
|
+
|
17
40
|
> Q4)List<byte>にintをAddできないが、intをbyteに変更する方法は? BitConverterを使う?
|
18
41
|
|
19
42
|
BitConverterでもキャストでもお好きにどうぞ
|
@@ -31,4 +54,13 @@
|
|
31
54
|
|
32
55
|
> Q7)戻すと配列は、{5,12,24,40}となるが58はどこに消えたのか?
|
33
56
|
|
34
|
-
intが32bitなので消えました
|
57
|
+
intが32bitなので消えました
|
58
|
+
|
59
|
+
> List<byte> bytes = new List<byte>({5,12,24,40,58,63,71,86});
|
60
|
+
としたとき、
|
61
|
+
ひょっとして、それは、
|
62
|
+
List<List<byte>> bytess = new List<List<byte>>({{5,12,24,40}, {58,63,71,86}});
|
63
|
+
みたいに
|
64
|
+
|
65
|
+
4byte毎にintに変換したいのかバイト列の一部をintに変換したいのか
|
66
|
+
見失ってませんか?
|
2
0x01000000 -> 0x1000000
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
> Q1)16777216や65536や256はどこから出てきたのか?
|
2
2
|
|
3
3
|
```
|
4
|
-
16777216 =
|
4
|
+
16777216 = 0x1000000 = 0x100 * 0x100 * 0x100
|
5
5
|
65536 = 0x10000 = 0x100 * 0x100
|
6
6
|
256 = 0x100
|
7
7
|
```
|
1
脱字 & フォーマット修正
answer
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
> Q1)16777216や65536や256はどこから出てきたのか?
|
2
2
|
|
3
|
+
```
|
3
4
|
16777216 = 0x01000000 = 0x100 * 0x100 * 0x100
|
4
|
-
|
5
|
+
65536 = 0x10000 = 0x100 * 0x100
|
5
6
|
256 = 0x100
|
7
|
+
```
|
6
8
|
|
7
9
|
> Q2)intをGetBytesすると、なぜ4つずつの組の配列になるのか?
|
8
10
|
|