gpt4 book ai didi

c - 在 C 字符串中存储十六进制值?

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:04 25 4
gpt4 key购买 nike

我有一个字符串 "SOMETHING/\xff",我想将 0xff 的十六进制表示形式保存到 char 缓冲区中。因此,我将正斜杠 (/) 之后的所有内容 strncpy 放入我的缓冲区(我们称之为 buff)。

但是,当我使用gdb 命令print\x buff 查看buff 的内容时,它并没有显示0xff。关于可能出什么问题的任何想法?有没有可能是我的正斜杠把事情搞砸了?

最佳答案

我认为您的问题与您在 gdb 中打印变量的方式有关。以这个简单的程序为例,编译为调试(-g 如果使用 gcc),然后运行并在第一个 puts 语句处中断:

int main(void)
{
char *ptr = "str \xff";
char arr[] = "str \xff";
puts(ptr);
puts(arr);

return 0;
}

如果我尝试按照您提到的方式打印 ptrp/x ptr,它将打印 ptr 的值(它指向的地址):

(gdb) p /x ptr
$1 = 0x4005f8

但是,如果我对 arr 执行相同的命令,我将得到:

(gdb) p /x arr
$2 = {0x73, 0x74, 0x72, 0x20, 0xff, 0x0}

那是因为 gdb 可以看到 arr 的类型是 char[6] 而不是 char*。您可以使用命令 p/x "str\xff" 获得相同的结果,这对于测试非常有用:

(gdb) p /x "str \xff"
$3 = {0x73, 0x74, 0x72, 0x20, 0xff, 0x0}


现在,如果您希望能够从指针指向的地址打印一定数量的字节,请使用 examine (x) 内存命令而不是 print (p):

(gdb) x/6bx ptr
0x4005f8 <__dso_handle+8>: 0x73 0x74 0x72 0x20 0xff 0x00

这将从 ptr 指向的地址开始以十六进制形式打印 6 个字节。用您的 buff 变量尝试一下,看看效果如何。


或者,您可以尝试的另一件事是:

(gdb) p /x (char[6])*ptr
$4 = {0x73, 0x74, 0x72, 0x20, 0xff, 0x0}

这会将 ptr 指向的 char 视为 6 个 char 数组中的第一个元素,并允许您使用打印命令。

关于c - 在 C 字符串中存储十六进制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10058865/

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