C语言字符转16进制输出的问题

我编了一个程序,按以下语句输出16进制:printf("%X",zjjg[i]);zjjg[8]char型数据。但是在输出后有些值是FFFFFFC0FFFFFF84FFF... 我编了一个程序,按以下语句输出16进制:
printf("%X ",zjjg[i]);
zjjg[8]char型数据。
但是在输出后有些值是FFFFFFC0 FFFFFF84 FFFFFF98 FFFFFF9A 我分析了一下,只要2进制第一位是1的数据前面都加了很多F,怎么才能把前面的F去掉啊。像这样:41 0 1E 39
for(i=0;i<8;i++)
{printf("%X ",zjjg[i]);} //zjjg[i])是存字符的数组

这是测试代码:
#include<stdio.h>
main()
{ int i;
char zjjg[]={"I 《"};
for(i=0;i<3;i++)
{printf("%X ",zjjg[i]);}
}
为什么"《"的16进制输出前面会多出了几个F啊
展开
 我来答
溥昌Qx
推荐于2016-08-15 · TA获得超过538个赞
知道小有建树答主
回答量:292
采纳率:0%
帮助的人:363万
展开全部
"《"是一个中文字符,占两个字节,机内码为A1 B6,每个字节的最高位都是1,强制转换成无符号数就可以了。代码如下:
int main()
{
int i;
char zjjg[]={"I 《"};
for(i=0; i<(int)strlen(zjjg); i++)
{
printf("%02X ", (unsigned char)zjjg[i]);
}

return 0;
}
todsong
2009-11-03 · 超过10用户采纳过TA的回答
知道答主
回答量:26
采纳率:0%
帮助的人:30.3万
展开全部
16进制第一个是1说明这是个负数,所以这些F是有意义的
用%d输出的话就是一个负数
你那个符号是汉字符号吧,汉字符号由两个两个char组成的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
L_o_o_n_i_e
2009-11-04 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5198万
展开全部
{printf("%X ", 0xff & zjjg[i]);}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式