как кодировать скалярный тип UInt32 в объект NSData - PullRequest
0 голосов
/ 24 февраля 2012

Я сейчас создаю этот объект 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];

}

Ответы [ 3 ]

3 голосов
/ 24 февраля 2012

Так что я понял это, и вместо того, чтобы просто обновить свой вопрос, я добавлю ответ, чтобы другие могли видеть, что на этот вопрос ответили, если они хотят сделать что-то подобное.

кодследующим образом

- (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 голос
/ 24 февраля 2012

Это должен быть NSData? Вы можете использовать NSString или NSNumber (оба могут быть сохранены в списке свойств).

Ваша схема на самом деле не различает 4-байтовую строку и UInt32, если это имеет значение.

0 голосов
/ 29 октября 2015

Вы можете использовать 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);

}

print

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>
...