Colocando nsstring no buffer uint8_t
-
22-09-2019 - |
Pergunta
Estou trabalhando com soquetes e tentando simplesmente escrever uma string no soquete. Encontrei alguns exemplos sobre como fazer isso, como o exemplo a seguir (Ostream é um NSOutputStream
). Isso tudo está dentro do NSStreamEventHasSpaceAvailable
.
uint8_t buffer[11] = "I send this";
int len;
len = [oStream write:buffer maxLength:sizeof(buffer)];
Isso funciona muito bem. Por isso, tentei modificá -lo para torná -lo personalizável, obtendo os bytes de uma NSString.
int len;
NSString* strId;
strId = @"string will be customized with several lines of code here";
uint8_t buffer[[strId lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];
[strId getBytes:buffer maxLength:sizeof(buffer) usedLength:NULL encoding:NSASCIIStringEncoding options:NULL range:NSRangeFromString(strId) remainingRange:NULL];
len = [oStream write:buffer maxLength:sizeof(buffer)];
Isso não está funcionando. Ele escreve sem bobagens completas no buffer (provavelmente os bytes) e estou recebendo um aviso para a linha Getbytes de "Passando o argumento 5 de getbytes faz com que o número inteiro de ponteiro sem elenco".
Desculpe se isso já foi perguntado antes, não conseguiu encontrar uma resposta da pesquisa e parecia que o problema deveria ser muito simples de corrigir. Obrigado!
EDITAR:Encontrei algo que parece funcionar, mas não tenho certeza se é uma programação adequada de algo assim. Por favor, veja a resposta abaixo. Esse código perigoso deve usar nesta situação?
Solução
A respeito -[NSString cStringUsingEncoding:]
?
Outras dicas
Depois de mais pesquisas, descobri que isso parece funcionar:
len = [oStream write:[[strId dataUsingEncoding:NSASCIIStringEncoding] bytes] maxLength:[strId lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];
Sinto que isso não é muito seguro, pois está usando algumas maneiras diferentes de colocar os dados no NSOutputStream, bem como no comprimento. HÁ AA PROBLEMA DE FAZER ISSO?