回答編集履歴
1
簡潔な書き直しを追加
answer
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
> error: cannot convert ‘unsigned char*’ to ‘int*’ in assignment
|
2
2
|
|
3
|
-
了解。キャストすればよいと思います。
|
3
|
+
了解。キャストすればよいと思います。たぶんこれで当面の対策になると思います。
|
4
4
|
|
5
5
|
```C
|
6
6
|
int *i1; // NULLで初期化する必要無し
|
7
|
-
i1 = (int*) &data[1]; // キャスト
|
7
|
+
i1 = (int*) &data[1]; // キャストする
|
8
8
|
printf("%d",*i1);
|
9
|
-
```
|
9
|
+
```
|
10
|
+
<stdint.h> がインクルードできる環境なら ``` int16_t ``` 型が使えるはずで、int16_t が良いけど、それが使えない環境なら short 型を使うのが良いかもしれない。かなり多くのコンパイラが16bit整数はshort型でアクセスできます。
|
11
|
+
それを踏まえて上記を簡潔に書き直すなら、こうです。もはやポインタ変数は不要です。
|
12
|
+
```C
|
13
|
+
printf("%d", *(short*) &data[1]);
|
14
|
+
```
|
15
|
+
data[1] のアドレスを **short 型のアドレスとみなす**、そしてそこの値を読みだす、というような意味になります。
|