gpt4 book ai didi

ios - 将字节读入 Swift 字符串

转载 作者:搜寻专家 更新时间:2023-11-01 05:51:32 25 4
gpt4 key购买 nike

我有一个包含以下数据的二进制文件 test.data:

01 E6 B5 8B E8 AF 95 02

第一个字节只是一个序列号01。接下来的6个字节是两个UTF8汉字“测试”。然后第8个字节又是另一个序列号02。

据我所知,UTF8 是可变长度的(1-4 字节)。请引用这个post .

我正在使用以下代码读取 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 长度是可变的?一般来说,我的问题是我应该如何阅读 UTF8 字符串?提前致谢。

最佳答案

只需读取 UnsafeMutablePointer 缓冲区并将其转换为字符串。返回的字符串将为 UTF8。

extension NSInputStream
{
public func readString(length:Int) -> String {

var str = ""

if length > 0 {
var readBuffer = UnsafeMutablePointer<UInt8>.alloc(length+1)

var numberOfBytesRead = self.read(readBuffer, maxLength: length)
if numberOfBytesRead == length {

var buf = UnsafeMutablePointer<CChar>(readBuffer)
buf[length] = 0
// the C String must be null terminated
if let utf8String = String.fromCString(buf) {
str = utf8String
}
}
readBuffer.dealloc(length)
}
return str

}
}

关于ios - 将字节读入 Swift 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25840276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com