2

我正在使用套接字并尝试简单地将字符串写入套接字。我找到了一些关于如何执行此操作的示例,例如以下示例(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 从指针中生成整数而不进行强制转换”。

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

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

4

2 回答 2

3

怎么样-[NSString cStringUsingEncoding:]

于 2010-02-22T23:34:20.017 回答
3

经过更多研究,我发现这似乎有效:

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

我觉得这似乎不是很安全,因为它使用了几种不同的方式将数据以及长度输入到 NSOutputStream 中。这样做会有问题吗?

于 2010-02-22T23:58:05.847 回答