大佬教程收集整理的这篇文章主要介绍了c – Void *数组转换为float,int32,int16等,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在运行时知道位深度和其他信息,我正在尝试有效编码而不重复代码.我需要的是一种有效的方法来投射矩阵,将PCM数据放入矩阵,然后再将其拉出.
我可以将矩阵分别转换为int32_t或int16_t用于32位和16位带符号的PCM,我可能必须将24位PCM存储在int32_t中,用于32位,8位字节系统.
任何人都可以推荐一种将数据放入这个数组的好方法,然后将其拉出来吗?我想避免大部分代码看起来像:
switch( mFormat ) { case 1: // unsigned 8 bit for( int i = 0; i < mChAnnels; i++ ) framesArray = (uint8_t*)pcm[i]; break; case 2: // signed 8 bit for( int i = 0; i < mChAnnels; i++ ) framesArray = (int8_t*)pcm[i]; break; case 3: // unsigned 16 bit ...
限制:我在C/C++工作,没有模板,没有RTTI,没有STl.想想嵌入式.当我必须将其移植到具有16位字节的DSP时,事情变得棘手.
有人可能愿意分享任何有用的宏吗?
谢谢,
-Griff
使用:
int main () { void** pcm; int currentChAnnel; int currentFrame; int mFormat; //gets data casted to our type STORETYPE translatedFrameData = GET_FRAMEDATA(pcm,currentChAnnel,currentFrame,mFormat ); return 0; }
头文件:
// this is a big type,we cast to this one #define STOREtype int32_t // these functions get a single frame typedef STORETYPE (*getterFunction)(void**,int,int); // this macros make an array that maps format codes to cast functions #define BEGIN_RESERVE_FORMAT_CODES getterFunction __getter_arraY[] = { #define RESERVE_FORMAT_CODE(codE) __get__##code##__,#define END_RESERVE_FORMAT_CODES }; // #define FORMAT_DEFinitioN(code,format) STORETYPE __get__##code##__(void**pcm,int chAnnel,int framE) \ { return (STORETYPE) ((format**)pcm)[chAnnel][frame]; } // get corresponding function #define GET_FRAMEDATA( pcm,chAnnel,frame,format ) __getter_arraY[format](pcm,framE) //serIoUs part,define needed types FORMAT_DEFinitioN(0,uint8_t) FORMAT_DEFinitioN(1,int8_t) FORMAT_DEFinitioN(2,uint16_t) FORMAT_DEFinitioN(3,int16_t) //actually this makes the array which binds types BEGIN_RESERVE_FORMAT_CODES RESERVE_FORMAT_CODE(0) RESERVE_FORMAT_CODE(1) RESERVE_FORMAT_CODE(2) RESERVE_FORMAT_CODE(3) END_RESERVE_FORMAT_CODES //WATCH OUT FOR SEQUENCE
希望有所帮助
以上是大佬教程为你收集整理的c – Void *数组转换为float,int32,int16等全部内容,希望文章能够帮你解决c – Void *数组转换为float,int32,int16等所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。