输出乱码问题

jianzhibeihang 2012-01-17 09:31:31
这段代码最后的输出是乱码,不知道问题在哪?请大家帮忙指正,多谢了!!

#include <stdio.h>
#include <string.h>

int main()
{
int i,j;
char buf[] = "123456781212121212121212121212121212121212";
char tmp_buf[512];
int len = strlen(buf);

for (i = 0,j = 0; i < len && j < 512; i++) {
if (i && ((i % 8) == 0))
tmp_buf[j++] = '\n';
sscanf(&buf[i],"%x",&tmp_buf[j++]);
tmp_buf[j++] = ' ';
}
tmp_buf[j] = '\0';
printf("%s\n",tmp_buf);
return 0;
}
...全文
218 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jianzhibeihang 的回复:]
123456781212121212121212121212121212121212

对于这个例子,希望得到的输出如下:
01 02 03 04 05 06 07 08
0c 0c 0c 0c 0c 0c 0c 0c
0c 0c 0c 0c 0c 0c 0c 0c
[/Quote]
#include <stdio.h>
char s[]="1234567812121212121212121212121212121212";
char *p;
int n;
unsigned int v;
void main() {
p=s;
n=0;
while (1) {
if (0==p[0]) break;
if (n<8) {
sscanf(p,"%1d",&v);
p++;
} else {
sscanf(p,"%2d",&v);
p+=2;
}
if (7==n%8) {
printf("%02x\n",v);
} else {
printf("%02x ",v);
}
n++;
}
}
//01 02 03 04 05 06 07 08
//0c 0c 0c 0c 0c 0c 0c 0c
//0c 0c 0c 0c 0c 0c 0c 0c
CoolEgos 2012-01-18
  • 打赏
  • 举报
回复
1楼很对,不加\0不能用 strlen用也是错的,大小不定
jianzhibeihang 2012-01-17
  • 打赏
  • 举报
回复
123456781212121212121212121212121212121212

对于这个例子,希望得到的输出如下:
01 02 03 04 05 06 07 08
0c 0c 0c 0c 0c 0c 0c 0c
0c 0c 0c 0c 0c 0c 0c 0c
jianzhibeihang 2012-01-17
  • 打赏
  • 举报
回复
这段十六进制是我的一个示例,
我的意思是输入一段char *最后转换成下面的形式输出
66 66 a5 9b 0b 57 02 94
cc a5 9b ac ae fe ef ef
ac ca ca ca ca ca ca ca
23 cd de de de de de de

描述清楚了吧 多谢各位了
database_system 2012-01-17
  • 打赏
  • 举报
回复
对于1 来说不管是60 进制还是16进制肯定不是你的66啊
直接把问题表述清楚
peng_weida 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jianzhibeihang 的回复:]
希望得到的输入格式如下,都是六十进制 存在tmp_buf中
printf输出后得到下面的样式

66 66 a5 9b 0b 57 02 94
cc a5 9b ac ae fe ef ef
ac ca ca ca ca ca ca ca
23 cd de de de de de de
[/Quote]
有问题吧
子达如何 2012-01-17
  • 打赏
  • 举报
回复
输出连续2个66,怎么也想不到如何与原数据对应~
子达如何 2012-01-17
  • 打赏
  • 举报
回复
不明白LZ的意图,请明示~
jianzhibeihang 2012-01-17
  • 打赏
  • 举报
回复
希望得到的输入格式如下,都是六十进制 存在tmp_buf中
printf输出后得到下面的样式

66 66 a5 9b 0b 57 02 94
cc a5 9b ac ae fe ef ef
ac ca ca ca ca ca ca ca
23 cd de de de de de de





nice_cxf 2012-01-17
  • 打赏
  • 举报
回复
如果你想用%x,那么不能直接用源串,因为会把整个字符串转成整形然后转16进制,要用临时串只拷贝1个字符
另外用%x转换后不能直接printf输出
nice_cxf 2012-01-17
  • 打赏
  • 举报
回复
用%c而不是%x
jianzhibeihang 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 peng_weida 的回复:]

sscanf(&buf[i],"%x",&tmp_buf[j++]);
改为:sscanf(&buf[i],"%c",&tmp_buf[j++]);

晕,楼主比较粗心哈
[/Quote]
我是想把它转换成十六进制的存到tmp_buf中去的
不想存成字符...
多谢了
peng_weida 2012-01-17
  • 打赏
  • 举报
回复
sscanf(&buf[i],"%x",&tmp_buf[j++]);
改为:sscanf(&buf[i],"%c",&tmp_buf[j++]);

晕,楼主比较粗心哈
_DaHuiLang_ 2012-01-17
  • 打赏
  • 举报
回复
tmp_buf里面只会有空格和回车字符,怎么输出你想要的字符呢?
jianzhibeihang 2012-01-17
  • 打赏
  • 举报
回复
怎么改呢?
jianzhibeihang 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhanshen2891 的回复:]

你是不是想一次转换一个字符啊

sscanf(&buf[i],"%x",&tmp_buf[j++]);
你这个是转换一个字符串
[/Quote]
是的 一次转换一个字符....
zhanshen2891 2012-01-17
  • 打赏
  • 举报
回复
你是不是想一次转换一个字符啊

sscanf(&buf[i],"%x",&tmp_buf[j++]);
你这个是转换一个字符串
Saleayas 2012-01-17
  • 打赏
  • 举报
回复

char buf[] = "123456781212121212121212121212121212121212\0";
WYJXHL97 2012-01-17
  • 打赏
  • 举报
回复
想要是实现你的想法你可以直接在buf中修改插入“0”,“ ”,“\n”在输出就行了
WYJXHL97 2012-01-17
  • 打赏
  • 举报
回复
你这段代码问题很多


#include <stdio.h>
#include <string.h>

int main()
{
int i,j;
char buf[] = "123456781212121212121212121212121212121212";
char tmp_buf[512];
int len = strlen(buf);

for (i = 0,j = 0; i < len && j < 512; i++) {
if (i && ((i % 8) == 0))
tmp_buf[j++] = '\n';
sscanf(&buf[i],"%x",&tmp_buf[j++]);//你这样存入tmp_buf[j++]中的是int型的数值
tmp_buf[j++] = ' ';
}
tmp_buf[j] = '\0';
printf("%s\n",tmp_buf);//这个时候输出的是char型的输出的是123456781212121212121212121212121212121212对应的是ASC
return 0;
}

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧