gpt4 book ai didi

c - 如何在 C 中将 uint_64 的十六进制表示形式复制到十六进制的无符号字符数组?

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

我不确定如何用语言表达我想要实现的目标,但我将在下面举一个例子,希望你们能帮帮我!

基本上,我试图将 uint64_t 值的十六进制表示形式复制到十六进制的无符号字符数组中。

我有什么:

uint64_t src;
unsigned char destination[8];
/* codes omitted, some codes that will change the value of src */
printf("src: %"PRIx64"\n", src); //this prints out src: 3132333435363738

如何将值从 src 复制到目标数组中:

destination[0] = 0x31;
destination[1] = 0x32;
destination[2] = 0x33;
//and so on...

谢谢!

编辑

对不起,如果我的问题不清楚,我是编程的新手,我很难解释自己。基本上,我只是试图将 printf() 打印出的任何内容作为十六进制存储到 unsigned char 数组中。

例如printf()输出字符串“3132333435363738”,我想取31存入dst[0],其中dst[0]的值为0x31,以此类推,其中dst[1]将是 0x32。

请多多包涵,谢谢!

最佳答案

以给定顺序提取构成整数的字节的简单且可移植的方法是仅使用位移位(可能还有掩码);在您的情况下,您似乎想以大端顺序提取字节(destination 中的第一个字节 => src 中的最重要字节),所以这将是:

uint64_t src;
unsigned char destination[8];
for(int i=0; i<8; ++i) {
destination[i] = src>>((7-i)*8);
}

在每次迭代中,src 向右移动 (7-i)*8 位,因为我们希望所需的字节位于结果的“底部”

第一次迭代:

src = 0x123456789abcdef0;
i = 0
(7-i) = 7
src >> ((7-i)*8) = 0x12

因此,我们得到了 0x12 并将其放入 destination[0];在下一次迭代中,我们有

i = 1
(7-i) = 6
src >> ((7-i)*8) = 0x1234

现在,我们可以用 0xFFmask 结果只取低 8 位(即 0x34),但这在我们的例子中并不重要,因为每个元素destination 是一个 unsigned 字节,因此当分配一个大于 255 的值时(如本例),它会发生无符号溢出,这被明确定义为仅采用较低的字节“适合”目标;所以,destination[1]=0x34

i 重复此操作直到 7,您将获得所需的结果。

关于c - 如何在 C 中将 uint_64 的十六进制表示形式复制到十六进制的无符号字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41183105/

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