我目前正在创建此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];
}
答案 0 :(得分:3)
所以我已经弄明白了,而不仅仅是更新我的问题,我会提出答案,以便其他人可以看到,如果他们想要做类似的事情,这个问题已得到解答。
代码如下
- (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];
}
答案 1 :(得分:1)
是否需要NSData?您可以使用NSString或NSNumber(两者都可以保存在属性列表中)。
如果重要的话,你的方案并没有真正区分4字节字符串和UInt32。
答案 2 :(得分: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>