NSNumber和NSData

时间:2018-09-16 12:30:28

标签: objective-c

我正在尝试从“学习Robert Clair的Objective C 2.0”中学习Obj C的基础知识。

我有一个NSNumber对象数组,我将该数组写入NSData对象缓冲区。 我想做的是使用类似NSLog的方法验证NSNumber对象是否正确写入,但是尝试时我只会得到垃圾。

这是我的代码:

    int howManyBytes3 = 100;
    NSMutableArray *myArray3 = [NSMutableArray array]; //Creates an empty NSArray
    for (NSInteger i=0; i<50; i++)
    {
        [myArray3 addObject:[NSNumber numberWithInteger:i]];
    }

    NSLog(@"My Array 3 contains : %@", myArray3);


    NSMutableData  *myData3 = [NSMutableData dataWithBytesNoCopy:myArray3 length:howManyBytes3 freeWhenDone:NO];
    NSLog(@"myData3 contains : %@", myData3);

这是我在控制台上得到的输出:

2018-09-16 13:24:39.396705+0100     Chapter9[12351:1341392] myData3 contains :   <917f30a8 ffff1d00 00000000 00000000 30186200 
     

01000000 00000000 44000000 33000000 32000000 00000000 00000000   00000000 00000000 01050610 00000010 00000000 00000000 00000000   00000000 00000000 00000000 00000000 00000000 6ad3364c>程序结束   退出代码:0

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

NSMutableArray不是C数组,它是一个对象引用。您正在尝试打印NSObject的内部字节布局。

为此,

1)您需要对象序列化机制-例如NSKeyedArchiver

2)您需要字节到字符的转换=> How to display hexadecimal bytes using NSLog