将 NSString 放入 uint8_t 缓冲区
-
22-09-2019 - |
题
我正在使用套接字并尝试简单地将字符串写入套接字。我找到了几个关于如何执行此操作的示例,例如以下示例(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以及长度不同的方式不是很安全。是否会有一个问题做这样的吗?
不隶属于 StackOverflow