好吧,我正在尝试创建一个简单的工具来从项目中的文件读取特定的偏移地址。
我可以很好地读取它并获取字节,问题是我想将结果转换为字符串,但我就是不能。
我的输出是这样的:<00000100 88000d00 02140dbb 05c3a282>但我想进入字符串。
找到了一些使用 NSData 扩展执行此操作的示例,但仍然不起作用。
所以任何人都可以帮忙??
这是我的代码:
class ViewController: UIViewController {
let filemgr = NSFileManager.defaultManager()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let pathToFile = NSBundle.mainBundle() .pathForResource("control", ofType: "bin")
let databuffer = filemgr.contentsAtPath(pathToFile!)
let file: NSFileHandle? = NSFileHandle(forReadingAtPath: pathToFile!)
if file == nil {
println("File open failed")
} else {
file?.seekToFileOffset(197584)
let byte = file?.readDataOfLength(16)
println(byte!)
file?.closeFile()
}
}
}
只要您知道编码,就可以像这样从NSData
对象创建字符串
let str = NSString(data: data, encoding: NSUTF8StringEncoding)
顺便说一下,您可能想尝试使用 if let
来解开您的可选包,而不是强制解包,以考虑故障的可能性:
let filemgr = NSFileManager.defaultManager()
if let pathToFile = NSBundle.mainBundle() .pathForResource("control", ofType: "bin"),
databuffer = filemgr.contentsAtPath(pathToFile),
file = NSFileHandle(forReadingAtPath: pathToFile)
{
file.seekToFileOffset(197584)
let bytes = file.readDataOfLength(16)
let str = NSString(data: bytes, encoding: NSUTF8StringEncoding)
println(str)
file.closeFile()
}
else {
println("File open failed")
}
@Martin此链接的正确答案:https://codereview.stackexchange.com/a/86613/35991
代码如下:
extension NSData {
func hexString() -> String {
// "Array" of all bytes:
let bytes = UnsafeBufferPointer<UInt8>(start: UnsafePointer(self.bytes), count:self.length)
// Array of hex strings, one for each byte:
let hexBytes = map(bytes) { String(format: "%02hhx", $0) }
// Concatenate all hex strings:
return "".join(hexBytes)
}
}
我用的是这样的:
let token = byte.hexString()