单片机C语言获取汉字GBK码的问题

u8 High8bit,Low8bit;
const u8 *str="啊" ;//以啊字为例,其GBK码是,B0A1
printf("\r\n 要读取的 字符是 :%s \r\n", str); // %s输出一个字符串
High8bit=*str; /* 取高8位数据 */
Low8bit=*(str+1); /* 取低8位数据 */
printf("\r\n High8bit :0x%x \r\n", High8bit); //通过串口打印到PC
printf("\r\n Low8bit :0x%x \r\n", Low8bit);

奇怪的事情发生了:
串口显示结果是:

要读取的 字符是 :啊

High8bit :0xffffffb0
Low8bit :0xffffffa1

为什么不是High8bit :0xb0 Low8bit :0xa1 呢????
这6个FFFFFF哪里来的???
要看清其定义是unsigned char啊!!想了半天,始终搞不明白啊。高手请指点一下
最近在学STM32,本来想了解一下GBK码字库,然后相办法把字库从SD卡转写到FLASH芯片W25X26.。
这个取高低8位,怎么去理解好呢?
High8bit=*str; /* 取高8位数据 */
Low8bit=*(str+1); /* 取低8位数据 */

是不是这样,例如“啊”占用两们字节0x00 0x01 , 高8 低8 找到地址。 先取高8 在把指针加1 取低?

stm32是32位的吧,也就是他传递的数都是以32位二进制为一单位的,0x0000 0000,它的每一个HEX位又是4位二进制的,8*4=32。所以你的数需要做合并处理。追问

如果是这样的话那结果应该是High8bit :0x000000b0 吧,可现在是High8bit :0xffffffb0

追答

不好意思刚看到,要是按你评价说的那样,放在子函数中和放在主函数中的寻址方式不一样,且要求主调和被调函数传递的参数类型一致,是不是这原因?在就看看STM32芯片资料了,它用到的指令系统有什么不同的。

温馨提示:答案为网友推荐,仅供参考
相似回答