gpt4 book ai didi

c - C 中的十六进制 unicode 与 printf()

转载 作者:行者123 更新时间:2023-12-02 09:24:10 25 4
gpt4 key购买 nike

这是我的代码:

#include <stdlib.h>
#include <stdio.h>

int main(int argc,char **argv){
printf("%x\n",*argv[1]);
return 1;
}

编译后(gcc -o main main.c),我运行它并且没有问题:

./main 1
31

注意:311的十六进制代码

但是当使用Unicode参数运行它时,打印十六进制的4Byte:

./main $(printf "\Udbb1")
ffffffed

问题是什么?

最佳答案

这里有两件事在起作用:

第一个是,当您将参数传递给像 printf 这样的变量参数函数时,它可能是 promoted 。这里发生的情况是角色是 promoted to an int值。

这里出现了另一件事,即符号扩展。如果您将一个小的有符号类型(例如 char 似乎在您的系统上)转换为另一个较大的有符号类型(例如 int),如果较小的类型为负数,则较大的类型为负数类型必须是相同的负数。又因路two's complement (这是在二进制系统上处理负数的最常见方法),该值将被前导二进制值填充。

如果您只想打印 char 值,则需要使用 printf格式前缀hh,如“%hhx”。该值将被视为unsigned char

关于c - C 中的十六进制 unicode 与 printf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39267458/

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