Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将C+中的整数quint8转换为qint16+;_C++_Qt_C++11_Types_Int - Fatal编程技术网

C++ 将C+中的整数quint8转换为qint16+;

C++ 将C+中的整数quint8转换为qint16+;,c++,qt,c++11,types,int,C++,Qt,C++11,Types,Int,我有一个整数数据类型quint8(无符号8位,值0…255),我想将其转换为整数数据类型qint16(有符号16位值)−32.768...32.767). 你能告诉我如何在QTC++中以一种高效的方式来实现吗? At the moment i am doing this but it doesn't work: qint16 Audio::to16bitSample(quint8 sample8bit) { qint16 sample16bit; sample16bit = (sample8b

我有一个整数数据类型quint8(无符号8位,值0…255),我想将其转换为整数数据类型qint16(有符号16位值)−32.768...32.767). 你能告诉我如何在QTC++中以一种高效的方式来实现吗?
At the moment i am doing this but it doesn't work:

qint16 Audio::to16bitSample(quint8 sample8bit) {
qint16 sample16bit;
sample16bit = (sample8bit - 128) << 15;
return sample16bit;
qDebug("stop");
目前我正在这样做,但不起作用:
qint16音频::16比特采样(五次采样8比特){
qint16样本16位;
sample16bit=(sample8bit-128),例如,8位无符号+255将转换为16位有符号+32767,或者8位无符号0将转换为16位有符号-32768

如何做到这一点?
谢谢你

我做到了这一点,代码可以工作:

qint16 Audio::to16bitSample(quint8 sample8bit) {

qint16 sample16bit;

sample16bit = (sample8bit - 128) * 256;

return sample16bit;

}

与您想要的最接近的整数解决方案是:

qint16 to16bitSampleMy(quint8 sample8bit)
{
    return ((sample8bit) << 8) - 32768;
}

您确实写过,您想要
0->-32768
255->32767
,但在这种情况下,最近点之间的差值不是整数。如果您仍然需要它,您所需要做的就是求解。

它不只是一个typedef吗?有什么可以改变的?按原样使用有什么问题?什么不起作用?(顺便说一句,您的
qDebug
语句不会执行)
到16位样本(5)返回
-32768
。你想达到什么目标?顺便说一句,
运算符您仍然不清楚,但我得到的感觉是,您希望
到16bitsample(0)
返回值
-32768
,而
到16bitsample(255)
必须返回值
32767
。我理解正确吗?(s16)(u8)这就是为什么我比你多写了一篇
+u8
did@user3528438事实上,你的变体更好。
qDebug() << to16bitSampleMy(0);
qDebug() << to16bitSampleMy(5);
qDebug() << to16bitSampleMy(127);
qDebug() << to16bitSampleMy(128);
qDebug() << to16bitSampleMy(129);
qDebug() << to16bitSampleMy(200);
qDebug() << to16bitSampleMy(255);
-32768 
-31488 
-256 
0 
256 
18432 
32512