• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:strtoul関数について)

strtoul関数について

このQ&Aのポイント
  • Atmelマイコンでテンキーパネルのクリックで得られた数値データを使って、パスワードなどの数値と照合して処理を行うプログラムを作成しています。
  • key_buf配列のkey_buf[0]から順に0x30('0')~0x39('9')の文字列の番号が代入されます。
  • strtoul関数の引数に(char *)key_bufを指定することで、配列の要素を文字列として解釈し、それとpassとの比較を行うことができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

>このようにすると、key[0]=0x31,key[1]=0x32,key[2]=0x33,key[3]=0x34 key_buf[0]=0x31,key_buf[1]=0x32,key_buf[2]=0x33,key_buf[3]=0x34 の書き間違えでしょうか? またstrtoul()に渡す文字列はNUL文字終端である必要があるので key_buf[0]='1',key_buf[1]='2',key_buf[2]='3',key_buf[3]='4',key_buf[4] = '\0' になってるのでしょうか。 また >これとpass=0x00001234 は同一と判定して、それ以外だとfalseと分岐されました。 strtoul()の第3引数が10ですから、"1234"は10進数での1234(16進数でいえば0x4d2)です。 0x00001234と同一と判断されるはずありません。

techhouse
質問者

お礼

回答頂きありがとうございます。 大変申しわけありません。1234は10進数で、16進数では0x000004d2ですね。リアルタイムデバッガでも0x000004d2であることを確認しました。 それと、 keyではなく、key_bufですね。 指摘頂きありがとうございます。

techhouse
質問者

補足

お世話になっております。補足コメント欄にて失礼いたします。 別に(char *)というのを入れなくても問題ないことを確認しました。 test_id_data = strtoul(key_buf,NULL,10); 少し勘違いを起こしていました。助かります。

すると、全ての回答が全文表示されます。

関連するQ&A