C コードでバイナリ データ パケットを作成する必要があります。ただし、いくつかの基本的な点が欠けています。現在、すでに構造体が定義されており、それらを使用する必要があります (少なくともパケット データの読み取りには)。受信パケットと送信パケットの両方に同じ構造が使用されます。パケット構造体は次のとおりです。
typedef struct {
uint8_t packetType;
uint16_t packetBody;
} MyStruct;
および別の構造体:
typedef union {
const uint8_t *bytes;
MyStruct *packet;
} MyPacket;
構造体へのポインターを受け取り、データを入力して返す関数は次のとおりです。
void packetWithBytes(MyPacket *packet)
{
packet->packet->packetType = 1; // crashed with EXC_BAD_ACCESS
packet->packet->packetBody = 3;
}
バイナリ データへのポインターを返す必要がある関数の呼び出しを次に示します。
MyPacket *packetRef;
packetWithBytes(packetRef);
NSData *data = [NSData dataWithBytes:packetRef->bytes length:sizeof(packetRef->bytes)];
どこかに(を使用して)スペースを割り当てる必要があると感じてmalloc
いますが、どこでどのように行うべきかわかりません。呼び出し側のコードは、パケットのサイズに関する詳細を認識してはなりません。割り当てを試みましたが、同じエラーが発生しました:
void packetWithBytes(MyPacket *packet)
{
packet->bytes = malloc(sizeof(uint8_t) + sizeof(uint16_t)); //crash
packet->packet->packetType = 1;
packet->packet->packetBody = 3;
}
メンバー バイトから削除しようとしましたが、同じエラーが発生しましconst
た。MyStruct
私はCにあまり慣れていないので、助けていただければ幸いです。