【问题标题】:LLDB po command encoding format of "\332"LLDB po 命令编码格式为“\332”
【发布时间】:2016-07-19 01:59:53
【问题描述】:

所以我从后端服务器得到了一个 NSData,我的后端工程师说有一个简单的解码逻辑,我必须得到第二个字节。

所以我通过

把这个 NSdata 变成了字节数组

const unsigned char *usageBuf = (unsigned char *)[keyData bytes];

当我在 LLDB 上打印它时,它的输出如下:

(lldb) po usageBuf "\x16\332d\336C\xa2Jc\x88./Q\374\326[\x01\x01\xa8\314\x96\x8d\320.c\x8bѐ\r\xb7'\317\366\342\206 >\x1fE\322e\x91\311\354\302"

但是,当我尝试打印 usageBuf[1] 时,它就像:

(lldb) po usageBuf[0]
'\x16'

(lldb) po usageBuf[1]
'\xda'

(lldb) po/x usageBuf[1]
0xda

(lldb) po usageBuf[2]
'd'

我很困惑 '\332' 是如何变成 '\xda' 的?我搜索了 UTF8 表,但它只是写了UTF-8 0x5C 0x33 0x33 0x32,所以我一定错过了一些谜题,请帮忙,谢谢!

【问题讨论】:

    标签: objective-c lldb


    【解决方案1】:

    这是一个数字基础的问题:

    十六进制 DA == 十进制 218 == 八进制 332

    【讨论】:

    • 那么我怎么知道它是 oct? UTF8 是基于八进制的吗?
    • 我问这个是因为第一个字节是\x16,第二个是\332,然后第三个字节是'd',所以'\x16'和'd'看起来是十六进制的,但是\332是 oct,它们不应该是一致的基础/格式吗?例如当我打印usageBuf时,它给出'\x16\xdad'
    • 检查 LLDB 的代码。它正在选择输出格式。
    • 八进制只是一个数字表示。 UTF8 是基于字节的,如何在调试器的输出中打印每个字节是无关紧要的。
    • 当然,LLDB 的实现定义了它的行为。你知道,它不是有感觉的。
    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2014-09-07
    相关资源
    最近更新 更多