char[2]とshortを比較の方法を教えてください。
short s = 0x3031;
char c[2] = {0x30, 0x31};
if(memcmp(s, c, 2) == 0)
{
printf("sとcは同じです。\n");
}
上記のようにコーディングすると、memcmpでエラーが出ます。
エラー:makes pointer from integer without a cast
charとshortの比較
Re:charとshortの比較
sじゃなくて&sにする必要があります。
私のインテルはいってるPCでは
short s = 0x3130;
char c[2] = {0x30, 0x31};
if(memcmp(&s, c, 2) == 0)
{
printf("sとcは同じです。\n");
}
で「同じです」になります。
私のインテルはいってるPCでは
short s = 0x3130;
char c[2] = {0x30, 0x31};
if(memcmp(&s, c, 2) == 0)
{
printf("sとcは同じです。\n");
}
で「同じです」になります。
Re:charとshortの比較
メモリの比較はエンディアンなどの問題で環境依存しますので、数値比較はmemcmpしない方が良いです。
if( c[0]==((s>>8)&0xff) && c[1]==(s&0xff) ) {
printf("sとcは同じです。\n");
}
にすべきです。
まぁ、無理やり出来なくないですがWindowsパソコンだと確実に"sとcは同じです"にはなりません。
さかまきさんの方法は、エンディアンに完全に依存した書き方ですので、よく分からないなら使うべきではありません(確実にバグの温床になります)。

if( c[0]==((s>>8)&0xff) && c[1]==(s&0xff) ) {
printf("sとcは同じです。\n");
}
にすべきです。
まぁ、無理やり出来なくないですがWindowsパソコンだと確実に"sとcは同じです"にはなりません。
さかまきさんの方法は、エンディアンに完全に依存した書き方ですので、よく分からないなら使うべきではありません(確実にバグの温床になります)。

Re:charとshortの比較
どんな目的でどんな比較をしたいのかによるでしょう。
まずはhttp://dixq.net/board/board.htmlを熟読して、必要な情報を補足してください。
まずはhttp://dixq.net/board/board.htmlを熟読して、必要な情報を補足してください。
Re:charとshortの比較
>さかまきs
回答ありがとうございます。
sと&sにすることでエラーは消えました。
ただ、char配列とshortのビットの並び順が同じで比較したいです。
言葉不足ですみません。
>softyas
1バイトずつ比較する方法で、問題を解決することが出来ました。
ありがとうございます。
また、エンディアンといった環境依存について教えていただきありがとうございます。
>たかぎs
「規約と注意事項」を読まずに投稿してしまいました。
指摘していただきありがとうございます。
今後とも、よろしくお願い致します。
回答ありがとうございます。
sと&sにすることでエラーは消えました。
ただ、char配列とshortのビットの並び順が同じで比較したいです。
言葉不足ですみません。
>softyas
1バイトずつ比較する方法で、問題を解決することが出来ました。
ありがとうございます。
また、エンディアンといった環境依存について教えていただきありがとうございます。
>たかぎs
「規約と注意事項」を読まずに投稿してしまいました。
指摘していただきありがとうございます。
今後とも、よろしくお願い致します。

Re:charとshortの比較
>ただ、char配列とshortのビットの並び順が同じで比較したいです。
>言葉不足ですみません。
エンディアンの関係で、私のインテルはいってるPCでは
char c[2] = {0x30, 0x31};
と同じであるには
short s = 0x3031;
ではなくて
short s = 0x3130;
ですよという意味合いで書きました。
結果が「同じです」にならないだけですので、どのように比較されても結構だと思います。
>言葉不足ですみません。
エンディアンの関係で、私のインテルはいってるPCでは
char c[2] = {0x30, 0x31};
と同じであるには
short s = 0x3031;
ではなくて
short s = 0x3130;
ですよという意味合いで書きました。
結果が「同じです」にならないだけですので、どのように比較されても結構だと思います。
Re:charとshortの比較
> 「規約と注意事項」を読まずに投稿してしまいました。
> 指摘していただきありがとうございます。
そう思うなら、どうして是正しないのでしょうか?
> 指摘していただきありがとうございます。
そう思うなら、どうして是正しないのでしょうか?