次のデータを含むバイナリ ファイル test.data があります。
01 E6 B5 8B E8 AF 95 02
最初のバイトは、たとえばシーケンス番号 01 です。次の 6 バイトは、2 つの UTF8 漢字「测试」です。次に、8 番目のバイトは、別のシーケンス番号 02 です。
私が知っているように、UTF8 は可変長 (1 ~ 4 バイト) です。この投稿を参照してください。
次のコードを使用して、Int32 と Byte(UInt8) を読み取ります。
extension NSInputStream
{
func readInt32() -> Int
{
var readBuffer = Array<UInt8>(count:sizeof(Int32), repeatedValue: 0)
var numberOfBytesRead = self.read(&readBuffer, maxLength: readBuffer.count)
return Int(readBuffer[0]) << 24 |
Int(readBuffer[1]) << 16 |
Int(readBuffer[2]) << 8 |
Int(readBuffer[3])
}
func readByte() -> Byte {
var readBuffer : Byte = 0
return self.read(&readBuffer, maxLength: sizeof(UInt8))
}
ストリームから文字列を読み取るメソッドを書きたいと思います。これが私が考えていることです:
- バイトの読み取り (読み取るバイト数がわかっていると仮定)
- バイトを文字に変換します
- 文字を文字列に追加する
しかし、問題は、UTF8 の長さが可変であるため、Character に対して読み取るバイト数です。一般的に、私の質問は、UTF8 文字列をどのように読み取るべきかということです。前もって感謝します。