首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印NSValue字节

如何打印NSValue字节
EN

Stack Overflow用户
提问于 2021-12-28 03:35:22
回答 1查看 66关注 0票数 0

如何打印NSValue字节?当使用print时,它不会打印所有字节并放置‘.’。例如{长度= 128,字节=0x00000000000f03f 00000000 00000000 . 00000000 00f03f}

代码语言:javascript
复制
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])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-28 16:26:57

首先,我们可以通过使用数组文本和SCNMatrix4初始化器来清除所有的可更改性来清理这一问题:

代码语言:javascript
复制
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])

这使得代码更加合理。我们还可以从文档中注意到,已有一个常量可用于获取身份矩阵:

代码语言:javascript
复制
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框中提取矩阵:

代码语言:javascript
复制
let sampleMatrix = a[0].scnMatrix4Value
print(sampleMatrix)

如果您想打印这些字节的布局(虽然还不清楚为什么要这样做,因为AFAICT、NSValueSCNMatrix4对它们的内存布局没有任何承诺),您可以使用常用的指针API,并结合一些十六进制打印逻辑(如this )

代码语言:javascript
复制
withUnsafeBytes(of: &sampleMatrix) { sampleMatrixPointer in
    print(sampleMatrixPointer.map { String(format: "%02x", $0) }.joined(separator: ""))
}

指纹:

代码语言:javascript
复制
000000000000f03f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f03f0000000000000000000000000000000000000000000000000000000000000000000000000000f03f
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70502539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档