Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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++;四舍五入功能(跨平台)_C++_Math - Fatal编程技术网

C++ C++;四舍五入功能(跨平台)

C++ C++;四舍五入功能(跨平台),c++,math,C++,Math,我有下面的功能,我就是不能正确。 我一次又一次地在做这件事,不知怎么的,总有一些事情出错 我对一些音频数据进行了编码。 音频数据以每帧3字节的“帧”进行编码 例如: Frame #1 0 1 2 Frame #2 3 4 5 Frame #3 6 7 8 现在,当我想解码一些音频(比如从字节位置4开始,长度为3字节)时,我首先要计算在哪个帧中会找到这个音频,需要解码多少帧,以及解码帧中的偏移量是多少 在这种情况下,我必须读取第2帧和第3帧,偏移量为1 我已尝试设置以下空白: int g_i

我有下面的功能,我就是不能正确。 我一次又一次地在做这件事,不知怎么的,总有一些事情出错

我对一些音频数据进行了编码。 音频数据以每帧3字节的“帧”进行编码

例如:

Frame #1
0
1
2

Frame #2
3
4
5

Frame #3
6
7
8
现在,当我想解码一些音频(比如从字节位置4开始,长度为3字节)时,我首先要计算在哪个帧中会找到这个音频,需要解码多少帧,以及解码帧中的偏移量是多少

在这种情况下,我必须读取第2帧和第3帧,偏移量为1

我已尝试设置以下空白:

int g_iByteSize1FrameDecoded = 3;

void CalcFrames(unsigned long uByteStart,unsigned long uByteCount,unsigned long &uStartFrame,unsigned long &uFramesToRead,unsigned long& uOffset)
{
    ////calculate in which decoded frame the byte from uByteStart would be found in
    uStartFrame = ((uByteStart) / g_iByteSize1FrameDecoded) + 1;
    unsigned long iEndFrame = ((uByteStart + uByteCount) / g_iByteSize1FrameDecoded) + 1;

    uFramesToRead = (iEndFrame - uStartFrame + 1);

    uOffset = (uByteStart) % g_iByteSize1FrameDecoded;
}
但它就是不起作用,总是出问题…四舍五入,数学本身


有一些数学技能的人可以看看我的错误在哪里吗?

我怀疑你是否决定从1开始计算帧和字节,而不是从0开始,但也许它对你的其余代码更有效-我不知道

CalcFrames
而言,我只能看到
uOffset
的问题。计算应为:

uOffset = (uByteStart % g_iByteSize1FrameDecoded) - 1;

例如,字节5从帧开始的偏移量为1字节。您最初的计算只是计算5%3,即2,因此需要额外减去1。

字节i位于帧i/3的偏移量i%3处:

void CalcFrames(unsigned long uByteStart,unsigned long uByteCount,unsigned long &uStartFrame,unsigned long &uFramesToRead,unsigned long& uOffset) {
    uStartFrame = uByteStart / g_iByteSize1FrameDecoded + 1;
    uOffset = uByteStart % g_iByteSize1FrameDecoded;
    unsigned long lastFrame = (uByteStart + uByteCount - 1) / g_iByteSize1FrameDecoded + 1;
    uFramesToRead = lastFrame - uStartFrame + 1;
}

恰好有
void
返回类型的函数通常不被称为“void”。我已相应地更新了您的标题和问题。我已更新了我的问题,使字节以0开头。您能否相应地更改您的答案?谢谢!抱歉,我不得不否决您的答案,因为您的更改没有更正它。