私はCの初心者です。ビット操作にいくつかの問題があります。すでにビット操作の探索を探しています。私のコードでは間違いを検出できません。bitoperationsをC言語で正しく使うには
この作業では、2つの列挙型のデータを16ビットのint値にシリアル化および逆シリアル化します。
typedef enum {
Stop = 0,
Start = 1,
Finish = 5,
Fail = 255
} Status;
typedef enum {
One = 1,
Fifteen = 15,
Last = 255
} Numbers;
列挙ステータスのデータは、下位バイトに保存し、列挙番号のデータは上位バイトに保存する必要があります。 だから私のシリアル化機能は、次のようになります。
void serialize(Status s, Numbers n, short int* data) {
*data = (unsigned) n<<8;
*data = (unsigned) (*data|s);
}
私のデシリアライズ機能は次のようになります。
void deserialize(unsigned short int data, Status* s, Numbers* n) {
*s = (unsigned) data<<8;
*s = (unsigned) *s>>8;
*n = (unsigned) data>>8;
}
問題は今、私はこのtestfunctionを実行すると、それは常に失敗呼び出すことです。
void testSD(Status s, Numbers n) {
unsigned short int data;
Status s2;
Numbers n2;
serialize(s, n, &data);
deserialize(data, &s2, &n2);
if(s2 == s && n2 == n) {
printf("succsess \n");
}
else {
printf("fail \n");
}
}
私は教授から得たので、テスト関数は正しいです。 serialize
機能で
'short int * data'は署名されているはずですか?私はちょっとそれを疑うよ。 – WhozCraig