C语音类型转换问题.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语音类型转换问题.相关的知识,希望对你有一定的参考价值。

读ucos源码发现里面有大量的类型转换,比如:

p_tmr->NamePtr = (CPU_CHAR *)((void *)"?TMR");

在IAR里面软件仿真做如下测试
typedef char CPU_CHAR;

//CPU_CHAR *pchar0 = (CPU_CHAR*)((void *)"?TMR");//1
//CPU_CHAR *pchar1 = (CPU_CHAR*)("?TMR");//2
CPU_CHAR *pchar2 = "?TMR";//3

void main(void)

asm("nop");
//printf("%s\n",pchar0);//1
//printf("%s\n",pchar1);//2
printf("%s\n",pchar2);//3
asm("nop");


1,2,3;依次便宜仿真看汇编代码,发现没有任何不一样,如下:

printf("is:%s\n",pchar);
000DBE 9100 0184 LDS R16,pchar//
000DC2 9110 0185 LDS R17,0x185//
000DC6 931A ST -Y,R17//
000DC8 930A ST -Y,R16//
000DCA E60D LDI R16,0x6D//
000DCC E011 LDI R17,0x01//
000DCE 940E 082B CALL printf//
000DD2 9622 ADIW R28,2//

哪为什么要加(void *);(CPU_CHAR *);这些强制类型转换?

还有很多,,比如,,,,
if (p_err == (OS_ERR *)0)
if (p_tmr == (OS_TMR *)0)
if (period == (OS_TICK)0)

防止编译器报错?但是也没有报错;如果是的话,IAR的编译器开关是哪个?
打开所有的MISRA C 2004 规则后编译出错,从而找到的,结论应该是编码规范和严格的问题,

Error[Pm139]: conversions shall not be performed between a pointer to object and any type other than an integral type, another pointer to object type or a pointer to void. This converts from type "char __near [5]" to "char *" (MISRA C 2004 rule 11.2)

参考技术A 写代码是看习惯的 有些人有这个习惯

go语音基础之类型转换

1、类型转换

示例:

package main //必须有一个main包

import "fmt"

func main() {
	//这种不能转换的类型,叫不兼容类型
	var flag bool
	flag = true
	fmt.Printf("flag = %t
", flag)

	//bool类型不能转换为int
	//fmt.Printf("flag = %d
", int(flag))

	//0就是假,非0就是真
	//整型也不能转换为bool
	//flag = bool(1)

	var ch byte
	ch = ‘a‘ //字符类型本质上就是整型
	var t int
	t = int(ch) //类型转换,把ch的值取出来后,转成int再给t赋值
	fmt.Println("t = ", t)

}

#执行结果:

flag = true
t =  97

  

 

以上是关于C语音类型转换问题.的主要内容,如果未能解决你的问题,请参考以下文章

百度ai 基于node 语音识别 音频文件类型转换

关于C语言数据类型转换的一个小问题,很简单哦!!

怎样将录制的语音转换成文字?

C语言数据类型的转换

关于C语言的语法中类型转换的一个问题。求教C语言高手。

linux C语言 取网口MAC地址 类型转换问题 详见内