Haskell 双转换的ByteString表示法
我正在编写自己的Haskell 双转换的ByteString表示法,haskell,wav,data-conversion,bytestring,Haskell,Wav,Data Conversion,Bytestring,我正在编写自己的WAVE解析器,使用它可以通过管道一个接一个地传输值 我通过hGet从.wav文件中获取一个样本(n是该wav文件的每个样本的字节数): bytes这是我当前将ByteString转换为双精度的解决方案: convertNBytesLen :: [Word8] -> Int32 convertNBytesLen = foldr accum 0 where accum bs a = 256 * a + fromIntegral bs bsToDouble :: S.B
WAVE
解析器,使用它可以通过管道一个接一个地传输值
我通过hGet
从.wav文件中获取一个样本(n是该wav文件的每个样本的字节数):
bytes这是我当前将ByteString转换为双精度的解决方案:
convertNBytesLen :: [Word8] -> Int32
convertNBytesLen = foldr accum 0
where accum bs a = 256 * a + fromIntegral bs
bsToDouble :: S.ByteString -> Int -> Double
bsToDouble bs n = if intV >= 0
then fromIntegral intV / 2147483647
else - (fromIntegral intV / (-2147483648))
where intV = convertNBytesLen (S.unpack bs) `shift` (32 - 8 * n)
我想知道这是否能以更有效的方式完成 这是我当前将ByteString转换为double的解决方案:
convertNBytesLen :: [Word8] -> Int32
convertNBytesLen = foldr accum 0
where accum bs a = 256 * a + fromIntegral bs
bsToDouble :: S.ByteString -> Int -> Double
bsToDouble bs n = if intV >= 0
then fromIntegral intV / 2147483647
else - (fromIntegral intV / (-2147483648))
where intV = convertNBytesLen (S.unpack bs) `shift` (32 - 8 * n)
我想知道这是否能以更有效的方式完成 您看过bytestring lexing
库中的readDouble
了吗?我觉得这些不像十六进制字符。@liminalish我看过。但我似乎无法安装该软件包。看起来像是被咬了。@ThomasM.DuBuisson你说得对。事实上,我不太确定代表性是什么。我来换个问题。你看过bytestring lexing
库中的readDouble
了吗?我看那些不像十六进制字符。@liminalish我没有。但我似乎无法安装该软件包。看起来像是被咬了。@ThomasM.DuBuisson你说得对。事实上,我不太确定代表性是什么。我来换个问题。