こんにちは
共用体のchar配列に入力したデータを2進数変換して表示したいのですがうまくいかず、困っています。
入力する値は整数305419896(16進数で0x12345678)とし、出力時bit[0]bit[31]に0か1が入るように表示させたいです。[3]はなにも表示されず、それ以降の要素の値も305419896の2進数の値ではありませんでした。
また、私の環境ではリトルエンディアンで処理されます。
サイトを参考にしながら2進数変換処理を作成したのですがbit[0]
itoa関数という非標準関数を使用してもできるそうですが、できれば使わずに処理を作成したいと思っています。
下記コードの変換処理のどこがまずいのか、ご指摘いただきたいです。
C
1#define _CRT_SECURE_NO_WARNINGS 2#include <stdio.h> 3#include <string.h> 4 5#define WORD_SIZE 2 6#define BYTE_SIZE 4 7#define BIT_SIZE 32 8 9typedef union 10{ 11 int data; /* 4byte */ 12 short word[WORD_SIZE]; /* 2byte×2 */ 13 char byte[BYTE_SIZE]; /* 1byte×4 */ 14 unsigned char bit[BIT_SIZE]; /* 1byte×32 */ 15}DATA; 16 17//関数プロトタイプ宣言 18void output_data(DATA *); 19 20int main(int argv, char* arg[]) { 21 22 DATA init_data; 23 DATA *union_data; 24 25 union_data = &init_data; 26 union_data->data = 305419896; 27 printf("入力データ:"); 28 printf("%d\n", union_data->data); 29 printf("=======================================\n"); 30 31 output_data(union_data); 32 33 int debag; 34 scanf("%d", &debag); 35 36 return 0; 37} 38 39void output_data(DATA *data) { 40 41 printf("DATA : 0x%08X\n", data->data); 42 printf("=======================================\n"); 43 printf("WORD(Hi) : 0x%04X\n", data->word[0]); 44 printf("WORD(Lo) : 0x%04X\n", data->word[1]); 45 printf("=======================================\n"); 46 int i; 47 for (i = 0; i < BYTE_SIZE; i++) { 48 49 printf("BYTE(%d) : 0x%02X\n", i, data->byte[i]); 50 51 } 52 printf("=======================================\n"); 53 54 for (i = 0; i<BIT_SIZE; i++) { 55 data->bit[i] = (data->data % 2) + '0'; 56 data->data /= 2; 57 printf("BITS(%d) : %c\n", i, data->bit[i]); 58 } 59 60}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/21 10:24