单片机串口小问题,我想要输出汉字,所以把汉字分为了高十六位和第十六位,但问题是为什么unsigned无符号还可以是-27,而且输出的数据压根对不上原来的汉字

单片机串口小问题,我想要输出汉字,所以把汉字分为了高十六位和第十六位,但问题是为什么unsigned无符号还可以是-27,而且输出的数据压根对不上原来的汉字

img

因为你用的是%d,输出就按有符号数解释,同一个内存值,按有符号解释是负数,按无符号解释是正数,这是很正常的情况。
你想输出为无符号,应该用%ud,后面的强制类型转换都没必要做。
而且你的格式化输出是以整数方式输出,而不是字符方式,自然不可能得到你期望的输出。
而且从你的代码看,你似乎对汉字的编码还存在误解,你代码里的a[0]只是“宇”的第一个内码,只是一个char类型的值,char可不存在什么高16位低16位。

要用%s打印输出字符串的形式打印,不能用%d