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の引数5を渡すと、キャストなしでポインタから整数になる」というgetBytes行の警告が表示されます。

申し訳ありませんが、これまでに質問されたことがありますが、検索しても答えが見つかりませんでした。問題の修正は非常に簡単なはずです。ありがとう!

編集: うまくいくように見えるものを見つけましたが、それがこのようなものの適切なプログラミングであるかどうかはわかりません。以下の回答をご覧ください。この状況で使用するのは危険なコードですか?

4

2 に答える 2

3

さらに調査した結果、これはうまくいくようだとわかりました。

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

データをNSOutputStreamに取得するためのいくつかの異なる方法と長さを使用しているため、これはあまり安全ではないように感じます。このようにするのに問題はありますか?

于 2010-02-22T23:58:05.847 に答える
3

どう-[NSString cStringUsingEncoding:]ですか?

于 2010-02-22T23:34:20.017 に答える