如何打印NSValue字节?当使用print时,它不会打印所有字节并放置‘.’。例如{长度= 128,字节=0x00000000000f03f 00000000 00000000 . 00000000 00f03f}
import Cocoa
import SceneKit
var identityMatrix = SCNMatrix4()
identityMatrix.m11 = 1
identityMatrix.m12 = 0
identityMatrix.m13 = 0
identityMatrix.m14 = 0
identityMatrix.m21 = 0
identityMatrix.m22 = 1
identityMatrix.m23 = 0
identityMatrix.m24 = 0
identityMatrix.m31 = 0
identityMatrix.m32 = 0
identityMatrix.m33 = 1
identityMatrix.m34 = 0
identityMatrix.m41 = 0
identityMatrix.m42 = 0
identityMatrix.m43 = 0
identityMatrix.m44 = 1
var a = [NSValue]()
a.append(NSValue(scnMatrix4:identityMatrix))
identityMatrix.m11 = 1
identityMatrix.m12 = 0
identityMatrix.m13 = 0
identityMatrix.m14 = 0
identityMatrix.m21 = 0
identityMatrix.m22 = 1
identityMatrix.m23 = 0
identityMatrix.m24 = 0
identityMatrix.m31 = 0
identityMatrix.m32 = 0
identityMatrix.m33 = 1
identityMatrix.m34 = 0
identityMatrix.m41 = 0
identityMatrix.m42 = -1.0
identityMatrix.m43 = 0
identityMatrix.m44 = 1
a.append(NSValue(scnMatrix4:identityMatrix))
print(a[0])发布于 2021-12-28 16:26:57
首先,我们可以通过使用数组文本和SCNMatrix4初始化器来清除所有的可更改性来清理这一问题:
import Cocoa
import SceneKit
let a = [
SCNMatrix4(
m11: 1, m12: 0, m13: 0, m14: 0,
m21: 0, m22: 0, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41: 0, m42: 0, m43: 0, m44: 1
),
SCNMatrix4(
m11: 1, m12: 0, m13: 0, m14: 0,
m21: 0, m22: 1, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41: 0, m42: -1, m43: 0, m44: 1
),
].map(NSValue.init(scnMatrix4:))
print(a[0])这使得代码更加合理。我们还可以从文档中注意到,已有一个常量可用于获取身份矩阵:
import Cocoa
import SceneKit
let a = [
SCNMatrix4Identity,
SCNMatrix4(
m11: 1, m12: 0, m13: 0, m14: 0,
m21: 0, m22: 1, m23: 0, m24: 0,
m31: 0, m32: 0, m33: 1, m34: 0,
m41: 0, m42: -1, m43: 0, m44: 1
),
].map(NSValue.init(scnMatrix4:))
print(a[0])不清楚为什么这些矩阵被包装在NSValue中,但是要显示有关它们的详细信息(并调用它们上的其他方法),您需要使用NSValue API从NSValue框中提取矩阵:
let sampleMatrix = a[0].scnMatrix4Value
print(sampleMatrix)如果您想打印这些字节的布局(虽然还不清楚为什么要这样做,因为AFAICT、NSValue和SCNMatrix4对它们的内存布局没有任何承诺),您可以使用常用的指针API,并结合一些十六进制打印逻辑(如this )
withUnsafeBytes(of: &sampleMatrix) { sampleMatrixPointer in
print(sampleMatrixPointer.map { String(format: "%02x", $0) }.joined(separator: ""))
}指纹:
000000000000f03f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f03f0000000000000000000000000000000000000000000000000000000000000000000000000000f03fhttps://stackoverflow.com/questions/70502539
复制相似问题