次の構造体をchar配列に変換して、シリアルポート経由で送信できるようにしようとしています。
struct foo
{
uint16_t voltage;
char ID ;
char TempByte;
char RTCday[2];
char RTCmonth[2];
char RTCyear[2];
char RTChour[2];
char RTCmin[2];
char Sepbyte;
}dvar = { 500, 'X' , '>' , "18" , "10" , "15" , "20" , "15" , '#'};
次に、以下を使用してそれをchar配列に変換します。
char b[sizeof(struct foo)];
memcpy(b, &dvar, sizeof(struct foo));
ただし、何らかの理由で、char配列にこれらの末尾の値を取得します
0x0A 0xFF
最初は値を取得していると思っていました。char配列にキャストすると、効果的に文字列にキャストされていたので、NULL '\ 0'でしたが
どんな助けでもありがたいです。
ありがとう
私はあなたが8ビットマイクロコントローラーを使用しているという卑劣な疑いを持っています!あなたは、印刷してデバッグすることができb[sizeof(foo)]
、そしてb[sizeof(foo)+1]
これらはあなたの2つの文字になります。お気づきの方は、これらを参照するべきではありません。char配列の範囲外です。例:n要素配列[0 ..(n-1)](構造体からコピー)
未使用の要素を構造体に追加する(または最終メンバーのサイズを大きくする)と、char配列を終了できます '\ 0'-コンパイラーはおそらくこれを実行したいと考えています。
または、@ Melebiusが示しているようにポインタの割り当てを行います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加