如何在C ++中将UINT8转换为UINT32?

时间:2016-10-11 13:10:21

标签: c++ pointers visual-c++ int type-conversion

我的类型为UINT8,我想将其设为UINT32

我的下列代码是否会被认为是正确,有效,高效和安全的?

UINT32 convU8toU32(UINT8 *number) {
  UINT32 result = *number;
  return *result;
}

请注意,我是来自Java世界的C ++的新角色。

4 个答案:

答案 0 :(得分:7)

该功能原样正确(*旁边的return *result;错字),但您甚至不需要它。整数(和其他整数类型)隐式转换为彼此,并且UINT32可以表示UINT8可以拥有的每个值,您只需编写

UINT32 target = source;
某些UINT8 source

使用static_cast明确转换是可选的;如果转换(可能)缩小,则演员会使一些编译器警告静音。

答案 1 :(得分:4)

你需要

 UINT32 result = static_cast<UINT32>(*number);

取消引用指针并将其转换为正确的类型

但是

UINT32 convU8toU32(UINT8 number) {
   return static_cast<UINT32>(number);
}

更好,并首先避免指针

事件最好避免函数调用,并在相应的代码行中键入静态强制转换。

答案 2 :(得分:4)

UINT32 convU8toU32(UINT8 *number) {
  UINT32 result = *number;
  return *result;
}

我在答案中假设UINT32UINT8是基本整数类型的花哨别名。

  

我的代码是否会被视为

     
      
  • 正确,有效
  •   

不,假设UINT32是一个整数。您不能取消引用整数。这是您尝试在return *result;

行上执行的操作
  
      
  • 高效
  •   

无关紧要,因为它不正确。

  
      
  • 安全
  •   

好吧,它安全地无法编译。

这应该没问题:

UINT32 convU8toU32(UINT8 number) {
    return number;
}

当然,这很简单,你可能想要考虑不调用函数,而是直接在第一时间分配:

// not UINT32 foo = convU8toU32(some_uint8);
// but instead:
UINT32 foo = some_uint8;

答案 3 :(得分:3)

嗯,不。假设UINT32是32位无符号整数类型而UINT8是8位无符号整数类型,则代码

UINT32 convU8toU32(UINT8 *number) {
   UINT32 result = *number;
   return *result;
}

甚至不会编译。原因是整数类型不能被解除引用,就像它是指针一样。因此,return *result语句不会编译,更不用说执行了。

实际上,将8位无符号整数值转换为32位无符号整数类型非常简单。

UINT32 convU8toU32(UINT8 number)
{
   UINT32 result = number;
   return result;
}

或者更简单地说,

UINT32 convU8toU32(UINT8 number)
{
   return number;
}

这些依赖于对32位无符号整数类型的隐式转换。由于32位无符号整数类型可以精确地表示8位无符号整数类型可以包含的每个值,因此转换保留了值。另一种方式的转换(从32位到8位)可能会失去价值。

如果您想避免隐式转换,只需进行显式转换,例如

UINT32 convU8toU32(UINT8 number)
{
    return (UINT32) number;    // C-style conversion - discouraged in C++
}

UINT32 convU8toU32(UINT8 number)
{
    return UINT32(number);
}

或(真正让任何看起来很明显,并且在搜索源文件时很容易找到)

UINT32 convU8toU32(UINT8 number)
{
    return static_cast<UINT32>(number);
}

当然,甚至不需要功能

 UINT8 value8 = something();
 UINT32 value32 = value8;

将代替使用此功能。