2

私はコーディングが初めてで、構造要素の float 値をコピーして に渡す際に問題に直面していint transmit_buffer[12]ます。これを手伝ってください。

#include <stdio.h>
#include <string.h>
int i;

main(){

   int transmit_buffer[12];
   struct TX_REPORT{
       int variable1;
       float variable2;
       int variable3;
       int variable4;
       int variable5;
       int variable6;  
   };

   struct TX_REPORT transmit_report = {1, 1.5, 40, 1, 45, 7};
   memcpy(transmit_buffer, &transmit_report, sizeof transmit_buffer);
   for(i=0;i<6;i++){
       printf("%d\n",transmit_buffer[i]);
   }
}
4

4 に答える 4

1

構造体ではなく構造体メンバーのコピーについて質問しているに違いありません。あなたが書いたことは異なる型変数では不可能であるため、これは memcpy(); で行うことができます。

char *buf = malloc(sizeof(info.a) + sizeof(info.b) + sizeof(info.c));
// Get a pointer to the beginning of the buffer
char *p = buf;
// Copy sizeof(info.a) bytes of stuff from info.a to p
memcpy(p, info.a, sizeof(info.a));
// Advance p to point immediately after the copy of info.a
p += sizeof(info.a);
// And so on...
memcpy(p, info.b, sizeof(info.b));
p += sizeof(info.b);
memcpy(p, info.c, sizeof(info.c));
于 2013-09-07T10:36:01.073 に答える
0

あなたのコードは多かれ少なかれ問題ないように見えますが、直面している実際の問題については言及していませんが、float 要素が明らかに対応しない int 値として表示されるという事実に満足していないと思います。その元の値。これは実際には表面的な問題にすぎません (この要素の型について printf に嘘をついているからです) が、より意味のあるバージョンのバッファーを見たい場合は、次のようにコードを変更できます。

#include <stdio.h>
#include <string.h>

int main(){
   int i;
   int transmit_buffer[12];
   struct TX_REPORT{
       int variable1;
       float variable2;
       int variable3;
       int variable4;
       int variable5;
       int variable6;  
   };

   struct TX_REPORT transmit_report = {1, 1.5, 40, 1, 45, 7};
   memcpy(transmit_buffer, &transmit_report, sizeof transmit_buffer);
   for(i=0;i<6;i++){
       if (i == 1)  // handle float element as special case
           printf("%g\n",transmit_buffer[i]);
       else         // other elements are ints
           printf("%d\n",transmit_buffer[i]);
   }
}
于 2013-09-07T10:52:26.147 に答える
0

あなたの最善の策は組合かもしれません -

typedef struct {
       int variable1;
       float variable2;
       int variable3;
       int variable4;
       int variable5;
       int variable6;  
   } t_AsStruct;

typedef union {
    t_AsStruct as_struct;
    int as_ints[sizeof(t_AsStruct)/sizeof(int) + 1];  /* N.B. a float can be various sizes so since we can't have 0.5 ints in an array add one */
    } t_tx_report;

注: 構造体を制御できる場合は、通常、構造体の途中でサイズの異なる型を混在させないことをお勧めします。これは、パディングによるメモリ使用量の増加や、メモリ アラインメントの問題によるパフォーマンスの低下につながる可能性があるためです。

于 2013-09-07T11:01:16.443 に答える