为什么该函数以相反的顺序显示十六进制代码
Why is the function displaying the hex code in reverse order?
以下代码(以C++为单位(应该获取一些数据及其大小(以字节为单位(并返回包含十六进制代码的字符串。 size
是存储在val
中存储位置的内存块的大小。
std::string byteToHexString(const unsigned char* val, unsigned long long size)
{
unsigned char temp;
std::string vf;
vf.resize(2 * size+1);
for(unsigned long long i= 0; i < size; i++)
{
temp = val[i] / 16;
vf[2*i] = (temp <= 9)? '0' + temp: 'A' + temp - 10; // i.e., (10 = 9 + 1)
temp = val[i] % 16;
vf[2*i+1] = (temp <= 9)? '0' + temp: 'A' + temp - 10; // i.e., (10 = 9 + 1)
}
vf[2*size] = ' ';
return (vf);
}
以此类推,按以下方式执行上述函数:
int main()
{
unsigned int a = 5555;
std::cout << byteToHexString((unsigned char*)(&a), 4);
return 0;
}
我们得到的输出是:
B3150000
输出不应该是000015B3
吗?那么,为什么以相反的顺序显示呢?代码有问题吗(我在 Ubuntu 中使用 g++ 编译器(?
您看到的是字节在架构上表示整数的存储顺序,这恰好是小端序。 这意味着,最低有效字节排在第一位。
如果要以普通数字形式显示它,则需要检测体系结构的字节序并相应地切换代码,或者仅使用字符串流:
unsigned int a = 5555;
std::ostringstream ss;
ss << std::setfill( '0' ) << std::setw( sizeof(a)*2 ) << std::hex << a;
std::cout << ss.str() << std::endl;
相关文章:
- 无法弄清楚如何使用 c++ 中的链表按从 a 到 z 的顺序显示字母
- 我已经做了一个程序来使用队列链C++表显示学生姓名和身高,现在我想以我不知道如何显示的顺序显示它
- 使用 while 循环显示顺序变量的值
- 以相反的顺序显示内容
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 如何创建跟踪以显示存在递归的调用顺序
- 显示反向顺序,但不显示非反向顺序 c++
- 从桌子状的顺序中显示从循环的值显示值,以使其更清晰和清洁
- 使用 "For Loop" 按以下顺序显示数字
- 链接列表:在C++中按物理和逻辑顺序显示列表
- 隐藏/显示所有窗口并恢复 Z 顺序
- 二进制搜索树顺序树显示
- 如何显示顺序文件的内容
- 为什么该函数以相反的顺序显示十六进制代码
- 为什么 bool 显示正确的位顺序,而直接输出移位运算结果却不显示?
- 按字母顺序显示名称
- 在c++中以随机顺序显示5个图像
- C++ 使用指针以相反的顺序显示句子
- 以奇怪的顺序显示矩阵元素
- 按顺序显示字符串-练习问题