c言語
1#include <stdio.h> 2 3typedef unsigned char BYTE; 4 5void main() 6{ 7 BYTE ucNum[4] = {0xd8,0x07,0x00,0x00}; 8 int iNum; 9 10} 11
1byte単位でアクセスしているものに4byte単位でアクセスし、
unsigned char配列で書いてあるものをint型で2008と出るようにしたいです。
皆さんありがとうございます!
申し訳ないんですけど、これをbitシフトを使用して「000007D8」の形にしてからint型で出力することってできるんですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
そもそもint型が4byteであるかどうかは処理系依存です。stdint.h
をincludeしてint32_t
型を利用してください。
投稿2020/11/11 09:10
総合スコア5852
0
ベストアンサー
Bitシフトでやりたいのであれば、
c
1 iNum = (ucNum[3] << 24) | (ucNum[2] << 16) | (ucNum[1] << 8) | ucNum[0];
投稿2020/11/11 08:58
総合スコア815
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
コレ↓があなたの求めるものか?
C
1#include <stdio.h> 2#include <string.h> 3 4typedef unsigned char BYTE; 5 6union data { 7 BYTE ucNum[4]; 8 int iNum; 9}; 10 11int main() { 12 union data tmp; 13 BYTE ucNum[4] = {0xd8,0x07,0x00,0x00}; 14 int iNum; 15 memcpy(tmp.ucNum, ucNum, sizeof(ucNum)); 16 iNum = tmp.iNum; 17 printf("%d\n", iNum); 18 return 0; 19}
投稿2020/11/11 08:30
総合スコア16612
0
処理系依存で良いのであれば
未定義動作との指摘があったので、回答を取り消します。
C
1//下記は未定義動作らしい 2//int iNum = *((int*)ucNum); 3
投稿2020/11/11 08:36
編集2020/11/11 11:19退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/11 09:08
退会済みユーザー
2020/11/11 11:08
2020/11/11 11:52
2020/11/12 16:35
退会済みユーザー
2020/11/13 01:26 編集
2020/11/13 05:11
0
以下のようにします。ucNumをそのままiNumへコピーします。
INTEL系のマシンなら正しく動作します。(int型は4バイト前提です)
C
1#include <stdio.h> 2#include <string.h> 3 4typedef unsigned char BYTE; 5 6void main() 7{ 8 BYTE ucNum[4] = {0xd8,0x07,0x00,0x00}; 9 int iNum; 10 memcpy(&iNum,ucNum,4); 11 printf("iNum=%d\n",iNum); 12} 13
実行結果
iNum=2008
投稿2020/11/11 08:32
総合スコア5493
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/11 10:52