首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >char* to float*

char* to float*
EN

Stack Overflow用户
提问于 2010-08-30 04:37:50
回答 2查看 2.2K关注 0票数 1

我想写一个函数,将char*缓冲区解包为浮动*缓冲区。char* buffer最初打包为浮点数形式的字节。

做这件事最好的方法是什么?

我已经实现了下面的整数。我在char*缓冲区中打包了一个4字节大小的整数数组。

这是我用来解压它并将它赋值给int*的函数。

代码语言:javascript
复制
void CharToInt(int* tar, char* src, int len) {
    char* val = src;
    char* end = src + len-1;
    for( ; val<end; tar++,val+=sizeof(int)) {
            *tar = ( (((*val) < 0) ?   256 + (*val)   : (*val)        ) +
                     (((*val+1) < 0) ? 256 + (*val+1) : (*val+1) << 8 ) +
                     (((*val+2) < 0) ? 256 + (*val+2) : (*val+2) << 16) +
                     (((*val+3) < 0) ? 256 + (*val+3) : (*val+3) << 24) );
    }
}

将256加到有符号字节上似乎可以处理有符号字符。(-128到127)。

这是因为它和翻转比特减去1是一样的吗?

无论如何,我正在寻找对应的浮点数*。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-30 06:58:06

“C89”不是C99,而是restrict。在几台机器上,sizeof(浮点数)可以!= 4。此解决方案独立于sizeof(浮点数),适用于所有ANSI C环境,并在"float“中返回成功导入的浮点数。

代码语言:javascript
复制
int chars_to_floats(const char *chars, float *floats, int len)
{
  int converted = 0;
  float *fp = (float*)chars;
  while( len >= sizeof*fp )
  {
    *floats++ = *fp++;
    len -= sizeof*fp;
    ++converted;
  }
  return converted;
}
票数 2
EN

Stack Overflow用户

发布于 2010-08-30 05:09:03

代码语言:javascript
复制
// Converts a single group of 4 chars to 1 float.
float char_to_float(const char* cs)
{
    return *(float*)cs;
}

// Converts every 4 chars into one float. len is the number of floats to unpack.
void chars_to_floats(const char* restrict chars, float* restrict floats, size_t len)
{
    for(size_t i = 0; i < len; ++i)
    {
        *floats = char_to_float(chars);
        *chars += 4;
        *floats += 1;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3596492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档