在char *和自定义联合之间转换类型的快速方法

时间:2016-06-29 09:47:06

标签: c++

我有两种类型和一种功能。 一种是

char one[32]

另一种类型是

typedef union _DATA{
    UINT8 byte[32];
    INT8  iByte[32];
}DATA

该函数将DATA作为输入参数

void Compute(DATA data){}

现在,我有char*(char [32])类型,我希望将其转换为DATA类型,并将其作为Compute的参数传递。两种类型都是32Byte大小,我想要一种快速转换类型的方法。
我想到了memcpy,但它很复杂,因为它复制了数据。
我能以某种方式使用指针将char *作为DATA类型传递吗?

1 个答案:

答案 0 :(得分:1)

在不破坏严格别名和明确定义的情况下执行此操作的唯一方法是从字符数组复制到联合的正确数组中。

也许像

DATA data;
if (std::is_signed<char>::value)
{
    std::copy_n(one, 32, data.iByte);
}
else
{
    std::copy_n(one, 32, data.byte);
}

除非你每秒数千次这样做,否则它不会变得慢#34;首先测量和分析,不要陷入过早优化的陷阱。