0

我目前正在创建这个 NSData 对象。我想放入 NSString 和 UInt32 类型的服务器不同的对象。我知道如何将 NSString 放入我的 NSData 对象,但我不知道如何使用 UInt32 标量类型来执行此操作。

这就是我使用 NSString 的方式

- (void) constructRequest
{
    NSString *mystring = [[NSString alloc] initWithString:[self addMethodName]];
    UInt32 protocolInt = [self addProtocolVersion];

    NSData* data=[mystring dataUsingEncoding:NSUTF8StringEncoding];
    [data writeToFile:@"/Users/imac/Desktop/_dataDump.dat" atomically:YES];

}
4

3 回答 3

4

所以我已经想通了,而不是仅仅更新我的问题,我会提出答案,这样其他人就可以看到如果他们想做类似的事情,这个问题已经得到了回答。

代码如下

- (void) constructRequest
{
    //NSString *mystring = [[NSString alloc] initWithString:[self addMethodName]];
    UInt32 protocolInt = [self addProt];

    NSData * data = [[NSData alloc] initWithBytes:&protocolInt length:sizeof(protocolInt)];

    //NSData* data=[mystring dataUsingEncoding:NSUTF8StringEncoding];
    [data writeToFile:@"/Users/imac/Desktop/_dataDump.dat" atomically:YES];

}
于 2012-02-24T01:14:54.633 回答
1

它需要是 NSData 吗?您可以使用 NSString 或 NSNumber (两者都可以保存在属性列表中)。

如果这很重要,您的方案并没有真正区分 4 字节字符串和 UInt32。

于 2012-02-24T01:24:27.463 回答
0

您可以使用htonl(),htons()和使其成为字节序安全的ntohl()ntohs()

 htonl()--"Host to Network Long int"     32Bytes
 ntohl()--"Network to Host Long int"     32Bytes
 htons()--"Host to Network Short int"   16Bytes
 ntohs()--"Network to Host Short int"   16Bytes

例子:

- (void)testExample {

UInt32 length = 0x1a2b3c4d;
NSLog(@"%x", length);
length = htonl(length);
NSLog(@"%x", length);
NSMutableData *data = [[NSMutableData alloc] init];
[data appendBytes:&length length:4];
NSLog(@"%@", data);

}

打印:

2015-10-29 15:46:49.224 UPHTTP-iOS[3896:101301] 1a2b3c4d
2015-10-29 15:46:49.224 UPHTTP-iOS[3896:101301] 4d3c2b1a
2015-10-29 15:46:49.224 UPHTTP-iOS[3896:101301] <1a2b3c4d>
于 2015-10-29T07:45:21.317 回答