我正在使用套接字并尝试简单地将字符串写入套接字。我找到了几个关于如何执行此操作的示例,例如以下示例(oStream 是一个 NSOutputStream)。这一切都在 NSStreamEventHasSpaceAvailable.

uint8_t buffer[11] = "I send this";             
int len;
len = [oStream write:buffer maxLength:sizeof(buffer)];

效果很好。所以我尝试修改它,通过获取 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)];

这根本不起作用。它将完整的乱码写入缓冲区(可能是字节),并且我收到 getBytes 行的警告“传递 getBytes 的参数 5 从指针生成整数而不进行强制转换”。

抱歉,如果之前有人问过这个问题,则无法通过搜索找到答案,而且看起来问题应该很容易解决。谢谢!

编辑:我发现了一些似乎有效的东西,但我不确定它是否是这样的正确编程。请看下面的答案。在这种情况下使用该代码是否危险?

有帮助吗?

解决方案

其他提示

在更多的研究,我发现,这似乎工作:

len = [oStream write:[[strId dataUsingEncoding:NSASCIIStringEncoding] bytes] maxLength:[strId lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];

我觉得好像是因为它使用一对夫妇的获取数据到NSOutputStream以及长度不同的方式不是很安全。是否会有一个问题做这样的吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top