将字符字节转换为整数值
Convert char byte to integer value
例如,130ABF(十六进制)等于1247935,所以我的字节数组是
char buf[3] = {0x13 , 0x0A , 0xBF};
我需要从字节数组中检索十进制值。
以下是我的示例代码:
#include<iostream>
using namespace std;
int main()
{
char buf[3] = {0x13 , 0x0A , 0xBF};
int number = buf[0]*0x10000 + buf[1]*0x100 + buf[2];
cout<<number<<endl;
return 0;
}
结果是:(错误)
1247679
除非我更改
char buf[3] = {0x13 , 0x0A , 0xBF};
至
int buf[3] = {0x13 , 0x0A , 0xBF};
那么它将得到正确的结果。
不幸的是,我必须将我的数组设置为char类型,有人知道如何解决这个问题吗?
将数组定义为:
unsigned char buf[3];
请记住,char是可以签名的。
更新:为了完成答案,有意思的是添加"char"是一种类型,可以等效于"signed char"或"unsigned char",但它不是由标准确定的。
在评估之前,数组元素将被提升到int
。因此,如果您的编译器将char
视为已签名,那么您将得到下一个(假设int
是32位):
int number = 19*0x10000 + 10*0x100 + (-65);
为了避免这种影响,您可以将数组声明为unsigned char arr[]
,或者使用掩码加移位:
int number = ((buf[0] << 16) & 0xff0000)
| ((buf[1] << 8) & 0x00ff00)
| ((buf[2] << 0) & 0x0000ff;
由于您的char数组已签名,当您想要初始化最后一个元素(0xBF
)时,您正试图将191分配给它,而它可以存储的最大值是127:发生了缩小转换。。。解决方法如下:
unsigned char[3] = { 0x13, 0x0A, 0xBF };
这将防止缩小转换范围。你的编译器应该给你一个警告。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 如何在C++中将整数转换为其数字数组
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 将最小值整数转换为无符号长整型
- 为什么我们不能将使用异或运算找到的整数转换为字符?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 将74位整数转换为以31为底的整数
- 独立于实现的浮点/整数转换
- 以最少的步骤将给定整数转换为另一个整数
- 浮点到整数转换出错(即使浮点数已经是整数)
- 了解双精度转换与整数转换中的整数与截断关系
- 禁止具有精度损失的整数转换
- 将任意整数转换为 void*
- 将 32 位大端有符号整数转换为有符号小端整数
- char a[0] 使用 itoa() 将整数转换为字符串的目的
- 使用函数时从整数转换为字符串
- 尝试从整数转换为字符串的月份
- 如何在C++中将整数转换为字节,以便 Unity 在通过 UDP 传输后能够理解它们
- 如何将 Q 格式的整数转换为浮点数(反之亦然)
- 如何避免字符串到整数转换情况下的无效参数异常