質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

2回答

1168閲覧

配列のポインタのアドレスの指す内容

paq4c

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

0クリップ

投稿2020/05/14 13:04

よろしくお願いいたします。

C言語にて下記のように、第一引数の配列データを使って、第二引数のsizeまでのチェックサムを作成する関数を解析しています。
コメント箇所の加算値が第一引数の中身をそのまま見てるわけではないようで、
解析の為、printf関数を使って中身をみても、配列の中身とは全然関係ない値になっていたりします。

(unsigned short *)&data[ulcnt] はポインタであるのはわかっているのですが、
そのポインタが指す内容が一体どこなのかが分らずにいます。

C

1unsigned short calcsum(unsigned char * data, unsigned long ullen) 2{ 3 unsigned long ulcnt; 4 unsigned short checksum; 5 checksum = 0; 6 7    // 変化値2(byte) 8 for (ulcnt = 0; ulcnt < ullen; ulcnt += sizeof(unsigned short) ) 9 { 10 checksum += *(unsigned short *)&data[ulcnt]; //加算値 11 } 12 13 return checksum ; 14}

質問:
以上の加算値( *(unsigned short *)&data[ulcnt] )が指す内容を
教えていただけると幸いです。
よろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

*(unsigned short *)&data[ulcnt]はポインタ(&data[ulcnt])の指す先をunsigned short(符号なし2バイト整数)の値として読んでいます。

(unsigned short *)&data[ulcnt] はポインタであるのはわかっているのですが、

そのポインタが指す内容が一体どこなのかが分らずにいます。

ポインタ自体は同じアドレスを指しています。
unsigned shortのポインタとなる為、*(unsigned short *)&data[ulcnt]とすると2バイト読み取るのです。
リトルエンディアン環境:data[ulcnt] + data[ulcnt+1] * 256
ビッグエンディアン環境:data[ulcnt] * 256 + data[ulcnt+1]

投稿2020/05/14 13:11

編集2020/05/14 13:23
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1バイト整数の並びを、2バイト整数として読む、ということをしてます。
1バイト整数の並びを2バイトごとに、unsigned shortとして読むとどうなるか、を考えてみましょう

投稿2020/05/14 13:09

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問