将NSString放入uint8_t缓冲区

时间:2010-02-22 23:23:41

标签: iphone objective-c cocoa-touch sockets nsoutputstream

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

很抱歉,如果之前已经询问过,找不到搜索的答案,看起来问题应该很容易修复。谢谢!

修改: 我找到了似乎有用的东西,但我不确定它是否适合这样的编程。请参阅下面的答案。在这种情况下使用那些危险的代码吗?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

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

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

我感觉好像不太安全,因为它使用了几种不同的方式将数据输入NSOutputStream以及长度。这样做是否会出现问题?