配列から構造体へデータコピー
配列から構造体へデータのコピーをしたいのですが、
構造体のメンバがビットフィールドで構成されている時の処理がわかりません。
--------test.c-----------
#include <stdio.h>
#include <string.h>
typedef struct{
unsigned char aaa :1;
unsigned char bbb :1;
unsigned char ccc :1;
unsigned int ddd :13;
unsigned char eee :2;
unsigned char fff :2;
unsigned char ggg :4;
}test_t;
int main(void)
{
test_t test_t;
unsigned char data[]={0x5F, 0xFE, 0x1C};
memcpy(&test_t, data, 4);
printf("aaa = %X\n", test_t.aaa);
printf("bbb = %X\n", test_t.bbb);
printf("ccc = %X\n", test_t.ccc);
printf("ddd = %d\n", test_t.ddd);
printf("eee = %X\n", test_t.eee);
printf("fff = %X\n", test_t.fff);
printf("ggg = %X\n", test_t.ggg);
return 0;
}
------期待出力---------
aaa = 0
bbb = 1
ccc = 0
ddd = 1FFE
eee = 0
fff = 1
ggg = 12
「test.c」を実行した時に「期待出力」のような出力を期待していたのですが、実際には
aaa = 1
bbb = 1
ccc = 1
ddd = 1
eee = 0
fff = 0
ggg = 0
と表示されてしまいます。
ビットフィールドで構成された構造体に、配列の値をそのままあてる事は出来ないのでしょうか?
出来るだけ、マスクやシフト演算を使用しないで、配列からビット単位で値を抽出したいのですが・・・
お礼
素早い回答ありがとうございます。 >ACCh は負の値、-1332、FFFh は-1と成ります。 この負の値ってのはどこから判断すればいいんですかね? ACC(16 →101011001100(2 →4+8+64+128+512+2048(10 ってことにはならないってことですよね・・・? この授業の先生が全部英語で話すんで途中でよくわからなくなってしまいました^^; >之は何かのクイズ問題ですか? その授業の最後にあるミニテストです 問題は perform the operation on this radix-16 number: Convert to 2's complement 14-bit binary; ACC + FFF です