如何在c++中将UINT8转换为UINT32 ?
How do you convert UINT8 to UINT32 in C++?
我有一个类型为UINT8
的值,我想把它设置为UINT32
。
我下面的代码被认为是正确的,有效的,高效的和安全的吗?
UINT32 convU8toU32(UINT8 *number) {
UINT32 result = *number;
return *result;
}
请注意,我是从Java世界来的c++新手。
这个函数是正确的(除了return *result;
中的*
的错别字),但是您甚至不需要它。整数(和其他整数类型)隐式地相互转换,并且由于UINT32
可以表示UINT8
可以具有的所有值,因此您可以简单地写入
UINT32 target = source;
为某些UINT8 source
.
使用static_cast
显式转换是可选的;如果转换(可能)窄化,则强制转换将静默一些编译器警告。
你需要
UINT32 result = static_cast<UINT32>(*number);
解除对指针的引用,并将其强制转换为正确的类型
,但
UINT32 convU8toU32(UINT8 number) {
return static_cast<UINT32>(number);
}
最好一开始就避免使用指针
Event最好避免在适当的代码行中进行静态强制转换中的函数调用和类型。
UINT32 convU8toU32(UINT8 *number) { UINT32 result = *number; return *result; }
我认为UINT32
和UINT8
是基本整数类型的花哨别名。
我的……代码
- 正确的,有效的
不,假设UINT32
是一个整数。不能对整数解引用。这就是你在return *result;
效率
不重要,因为它是不正确的。
编译失败。
这个应该没问题:
UINT32 convU8toU32(UINT8 number) {
return number;
}
当然,这太简单了,您可能想要考虑不调用该函数,而是直接赋值:
// not UINT32 foo = convU8toU32(some_uint8);
// but instead:
UINT32 foo = some_uint8;
不。假设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;
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- C++:从 "const variable*" 转换为"uint32"会失去精度
- 从指针到 uint32 的类型转换
- 将字符 * 转换为 uint16 和 uint32
- 警告缩小转换范围(uint32 到 uint8)
- 将 UINT32 颜色格式从 AaBbGgRr 转换为 AaRrGgBb
- 隐式转换:uint32到int
- 如何在c++中将UINT8转换为UINT32 ?
- 将UINT32值转换为UINT8数组[4]
- 当数字声明为uint32和uint64时,将整数转换为二进制会显示不同的输出
- 将 uint32 转换为常量字符* C++
- 将float转换为uint64和uint32的行为很奇怪