uint8_t 配列に余分なバイトを追加する obj c に奇妙な問題があります。
関連する 2 つのメソッドを次に示します。
ViewController.m
- (void)viewDidLoad {
// hexData = NSData object
const uint8_t *hexBytes = [hexData bytes];
// header is first 3 bytes
uint8_t headerBytes[] = {hexBytes[0],hexBytes[1],hexBytes[2]};
// output the size
NSLog(@"View did load header size: %lu", sizeof(headerBytes));
// create a MessageHeader object
MessageHeader *messageHeader = [[MessageHeader alloc] initWithBytes:headerBytes];
}
MessageHeader.h
- (id)initWithBytes:(uint8_t *)bytes {
self = [super init];
if(self != nil){
NSLog(@"Message header init bytes size: %lu", sizeof(bytes));
NSData *data = [NSData dataWithBytes:bytes length:sizeof(bytes)];
self.bytes = bytes;
}
return self;
}
コンソール出力
ビューはヘッダー サイズをロードしました: 3
メッセージ ヘッダーの初期バイト サイズ: 4
これは非常に奇妙です!バイトを画面に出力すると、明らかな理由もなく余分なバイトがデータに追加されたことが示されます。eef231
が入力の場合はeef23150
、init メソッドの出力です。その余分なバイトは一見ランダムです。
メソッドuint8_t headerBytes[]
とuint8_t *bytes
の間のキャストではないかと思います。init
誰かがそれについてさらに情報を持っているなら、それは素晴らしいことです。ありがとう