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

回答編集履歴

3

追記

2017/12/13 07:18

投稿

asm
asm

スコア15149

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

2017/12/13 07:18

投稿

asm
asm

スコア15149

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > Q1)16777216や65536や256はどこから出てきたのか?
2
2
 
3
3
  ```
4
- 16777216 = 0x01000000 = 0x100 * 0x100 * 0x100
4
+ 16777216 = 0x1000000 = 0x100 * 0x100 * 0x100
5
5
  65536 = 0x10000 = 0x100 * 0x100
6
6
  256 = 0x100
7
7
  ```

1

脱字 & フォーマット修正

2017/12/13 06:12

投稿

asm
asm

スコア15149

answer CHANGED
@@ -1,8 +1,10 @@
1
1
  > Q1)16777216や65536や256はどこから出てきたのか?
2
2
 
3
+ ```
3
4
  16777216 = 0x01000000 = 0x100 * 0x100 * 0x100
4
- 6553 = 0x10000 = 0x100 * 0x100
5
+ 65536 = 0x10000 = 0x100 * 0x100
5
6
  256 = 0x100
7
+ ```
6
8
 
7
9
  > Q2)intをGetBytesすると、なぜ4つずつの組の配列になるのか?
8
10