加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 将float向量重新解释为unsigned char数组并返回

发布时间:2020-12-16 10:16:07 所属栏目:百科 来源:网络整理
导读:我搜索并搜索了stackoverflow的答案,但还没找到我需要的东西. 我有一个例程,它将unsigned char数组作为参数,以便将其编码为Base64.我想在Base64中编码STL浮点向量(向量),因此需要将浮点向量中的字节重新解释为无符号字符数组,以便将其传递给编码例程.我已经
我搜索并搜索了stackoverflow的答案,但还没找到我需要的东西.

我有一个例程,它将unsigned char数组作为参数,以便将其编码为Base64.我想在Base64中编码STL浮点向量(向量),因此需要将浮点向量中的字节重新解释为无符号字符数组,以便将其传递给编码例程.我已经尝试了很多东西,从重新解释和静态转换,到mem副本等,但它们似乎都没有工作(至少不是我实现它们的方式).

同样,在将编码数据解码回浮点数组时,我需要做相反的事情.解码例程将解码数据作为unsigned char数组提供,我将需要重新解释该字节数组,再次将其转换为浮点数.

这是我的C代码的精简版本来进行编码:

std::string
EncodeBase64FloatVector( const vector<float>& p_vector )
{
  unsigned char* sourceArray;

  // SOMEHOW FILL THE sourceArray WITH THE FLOAT VECTOR DATA BITS!!

  char* target;
  size_t targetSize = p_vector.size() * sizeof(float);
  target = new char[ targetSize ];

  int result = EncodeBase64( sourceArray,floatArraySizeInUChars,target,targetSize );

  string returnResult;
  if( result != -1 )
  {
    returnResult = target;
  }
  delete target;
  delete sourceArray;
  return returnResult;
}

任何帮助将不胜感激.谢谢.

雷蒙德.

解决方法

std :: vector保证数据是连续的,你可以通过获取第一个元素的地址(假设它不为空)来获得指向向量中第一个元素的指针.

typedef unsigned char byte;
std::vector<float> original_data;
...
if (!original_data.empty()) {
  const float *p_floats = &(original_data[0]);  // parens for clarity

现在,要将其视为unsigned char数组,请使用reinterpret_cast:

const byte *p_bytes = reinterpret_cast<const byte *>(p_floats);
  // pass p_bytes to your base-64 encoder
}

您可能希望在其余数据之前对向量的长度进行编码,以便更容易对其进行解码.

注意:您仍然需要担心字节顺序和表示详细信息.这只有在您回读与您编写的同一平台(或兼容的平台)时才有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读