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 に答える