如何将十六进制值存储在Plist中并再次读回

时间:2015-06-26 12:58:08

标签: objective-c hex plist

如果现在已经试图解决这个问题,我的思绪已经消失了。

我想要做的是在plist中的NSData中存储十六进制值。 然后我希望能够读回十六进制。

我很困惑。

所以我尝试存储十六进制值0x1124。 当我查看得到的plist时,值为24110000。 当我打印此值时,我得到23FA0

我想要做的是确认0x1124被写入我的plist并确保我可以打印出正确的值。

我感觉我在这里缺少一些非常基本的东西。

NSMutableDictionary  *tempDict=[NSMutableDictionary new];
    // Byte hidService= 1124;
    //int hidService= 00001124-0000-1000-8000-00805f9b34fb
    unsigned int hidService[]={0x1124};

    NSData  *classlist=[NSData dataWithBytes:&hidService length:sizeof(hidService)];
    NSArray  *classListArray=@[classlist];
    [tempDict setValue:classListArray forKey:kServiceItemKeyServiceClassIDList];

    hidProfileDict=[[NSDictionary alloc]initWithDictionary:tempDict];
    NSLog(@"%X",[hidProfileDict valueForKey:kServiceItemKeyServiceClassIDList][0]);


    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSFileManager  *fileManager=[NSFileManager defaultManager];
    NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"HIDDictionary.plist"];
    if (![fileManager fileExistsAtPath: plistPath])
    {
        NSString *bundle = [[NSBundle mainBundle] pathForResource:@"HIDDictionary" ofType:@"plist"];
        [fileManager copyItemAtPath:bundle toPath:plistPath error:&error];
    }
    [hidProfileDict writeToFile:plistPath atomically: YES];

2 个答案:

答案 0 :(得分:1)

如果您只想存储两个字节,请使用显式UInt16类型

UInt16 hidService[]={0x1124};
NSData  *classlist = [NSData dataWithBytes:&hidService length:sizeof(hidService)];

答案 1 :(得分:1)

0x1124只是二进制位0001000100100100或十进制数4388的十六进制表示.0x只是指定显示基数的一种方式,它不是数字的一部分。该数字可以在二进制程序中用0b前缀表示:int b = 0b0001000100100100;。这些只是相同数字的不同表示。

要向NSDictionaryNSArray添加号码,您需要将其转换为NSNumber,最简单的方法是使用文字语法:@(0x1124)或{{ 1}}。

前:

@(4388)

NSArray *a = @[@(0x1124)];