4バイトの2進数を1バイトごとに区切り、それぞれ別の変数に代入したいです。
C言語でやる場合はどのように行えばよいのでしょうか?
たとえば、
10001000101001010110101000101001
という信号を読み取ったとき、
a = 10001000;
b = 10100101;
c = 01101010;
d = 00101001;
といったように代入したいです。
できれば具体的にどのようにプログラミングすればよいのか記述していただけると幸いです。
何卒よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
こんにちは。
まず、「4バイトの2進数」は、ちょっと表現を間違っているようです。
「4バイトの整数」の方が良いです。そして、整数は10進数、2進数、16進数などで表現できるという関係になります。
AVRはリトル・エンディアンなので、下記プログラムで変換できます。
C言語は整数を2進数で表現する標準機能を持たないので、16進数で出力してます。
C
1#include <stdio.h> 2#include <stdint.h> 3 4typedef union 5{ 6 uint32_t before; 7 struct 8 { 9 uint8_t d; 10 uint8_t c; 11 uint8_t b; 12 uint8_t a; 13 }; 14} Transfer; 15 16int main() 17{ 18 Transfer transfer; 19 transfer.before=0x12345678; 20 printf("0x%02x\n", transfer.a); 21 printf("0x%02x\n", transfer.b); 22 printf("0x%02x\n", transfer.c); 23 printf("0x%02x\n", transfer.d); 24 return 0; 25}
投稿2016/06/14 10:20
総合スコア23274
0
ベストアンサー
int型の変数を4byte、byte型の変数を1byteとしたとき、1byteずつ取り出すならビット演算子を使うことができます。
C
1int data = 2292541993;//10001000101001010110101000101001 2byte a = (byte)(((0xFF000000 | data) >> 24) & 0xFF); 3byte b = (byte)(((0x00FF0000 | data) >> 16) & 0xFF); 4byte c = (byte)(((0x0000FF00 | data) >> 8) & 0xFF); 5byte d = (byte)(((0x000000FF | data)) & 0xFF);
訂正
uint(符号なし4byte)、ubyte(符号なし1byte)とします。
C
1uint data = 2292541993;//10001000101001010110101000101001 2ubyte a = (ubyte)((data >> 24) & 0xFF); 3ubyte b = (ubyte)((data >> 16) & 0xFF); 4ubyte c = (ubyte)((data) >> 8) & 0xFF); 5ubyte d = (ubyte)(data & 0xFF);
投稿2016/06/14 09:52
編集2016/06/14 23:05総合スコア9210
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
C
1unsigned int in_data = 0x88a56a29; 2unsigned char *out_data = (unsigned char *)&in_data; 3printf("%02x\n", out_data[0]); 4printf("%02x\n", out_data[1]); 5printf("%02x\n", out_data[2]); 6printf("%02x\n", out_data[3]);
こんな感じでいかがでしょうか。
投稿2016/06/14 23:29
総合スコア2425
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。