标题: 请教C语言printf格式 [打印本页]

作者: dalaoshi    时间: 2022-5-26 03:42
标题: 请教C语言printf格式
这是我抄来的C代码,编译后跑出来显示的字符是:(Buffer里面的)

90306E

我需要输出的是90的HEX值,30的HEX值,6E的HEX值(1个byte,90H,30H,6EH), 而不是字符,该怎么做呢?
另外想知道(RxBuffer[ i])是一个字节(90H)还是两个字节(字符9和0)?我想要做程序判断用。


for ( i = 0; i < len; i ++ ){
switch (i)
{
case 1:
   printf("%02X",(UINT16)(RxBuffer[ i]));
  //if ((UINT16)RxBuffer[ i] == 0xC0) {
  //haha = 1;
  //}
   break;
case 2:
   printf("%02X",(UINT16)(RxBuffer[ i]));
   break;
case 3:
    printf("%02X",(UINT16)(RxBuffer[ i]) );
   break;
}
}




作者: 名字不是重点    时间: 2022-5-26 09:10
如果,90是十进制,那90的16进制=90/16<<4|90%16=0x5A

RxBuffer[ i])是一个字节(90H)还是两个字节(字符9和0)?
就看你是如何定义RxBuffer[]这个数组的了。
作者: devcang    时间: 2022-5-26 10:22
不是字符,就是 ungsigned char 类型,除符号、字母、数字很,很多是不可见的
作者: lkc8210    时间: 2022-5-26 10:43
printf就是把所有数据转换为字符送到串口,想直接传数值就用putchar
作者: xuyaqi    时间: 2022-5-26 10:45
用 printf 就是要把 RxBuffer 转变成字符发送,要发送HEX值直接串口发送就行,不要用 printf 。
作者: dalaoshi    时间: 2022-5-26 16:19
谢谢各位,试验了一晚的问题,一下就解决了,用putchar((UINT16)(RxBuffer[i]) )出来的就是90H了。

另外我需要作字节判断,i=1时,如果((UINT16)RxBuffer[i]) 是C0H, 就设haha=1, 等到i=3时,必须haha是0才可输出字符,若不是0,则重置haha=0,
编译时无错误,跑的时候,全部都是只有2个字节,i=3的那个都没有输出,逻辑没问题,应该是c语言表达字符不对。

switch:

CASE 1:
if (((UINT16)RxBuffer[i]) == 0xC0)  {
   haha = 1;
}               

                                                          
CASE 3:
if (haha == 0) {
  putchar((UINT16)(RxBuffer[i]) );
} else {
  haha == 0;
}

C语言还未入门,问题很幼稚,大家别笑哦。

作者: Hephaestus    时间: 2022-5-26 21:46
dalaoshi 发表于 2022-5-26 16:19
谢谢各位,试验了一晚的问题,一下就解决了,用putchar((UINT16)(RxBuffer) )出来的就是90H了。

另外我 ...

haha == 0;
这么明显的错误看不出来吗?
作者: dalaoshi    时间: 2022-5-26 22:43
Hephaestus 发表于 2022-5-26 21:46
haha == 0;
这么明显的错误看不出来吗?

就是还没入门嘛! 终于搞懂==是用来比较的,=是用来赋值的。

这是IC厂家写的例子,非常复杂,有USB驱动,完全看不懂,但修改一下适合自己用还是可以的,也被迫学了几个C代码,虽然撞到门槛,也算是入门了。





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1