gpt4 book ai didi

c++ - 如何将具有十六进制值的二进制数组转换为十进制,然后再转换为字符串

转载 作者:行者123 更新时间:2023-11-30 01:32:08 26 4
gpt4 key购买 nike

我有一个包含十六进制值的二进制数组,我想将其转换为十进制。完成后,我想将其显示在一个字符串中。

顺便说一句,我正在通过 ubuntu 开发一个英特尔进程,这可能会在 sun many hp unix 机器上使用。

当我对 unsigned long 进行直接赋值时,它起作用了……就像小数部分一样。我还没有把它变成一个字符串,但我不确定它为什么有效。此外,我在某处读到,当你把它放在 unsigned long 中时,你不必担心字节顺序。

关于如何处理这个问题以及为什么上述方法也有效,我能得到一些帮助吗?

请注意:我使用的是 C++ 而不是 .net 的东西,所以 bitconverter 不可用。

编辑(从下面对自己问题的回答复制)

首先感谢 IBM 文章真正提供帮助的字节序链接。知道我只是将它放入寄存器而不是手动将字节值放入连续的内存位置,这就消除了整个字节序问题,产生了很大的不同。

这是我写的一段代码,我知道它可以更好,但它只是一些快速......

// use just first 6 bytes
byte truncHmac[6];
memset( truncHmac, 0x00, 6 );
unsigned long sixdigit[6];
for (int i=0; i<=5; i++)
{
truncHmac[i]=hmacOutputBuffer[i];
sixdigit[i]=truncHmac[i];
std::cout<<sixdigit[i]<< std::endl;
}

输出是

HMAC: 76e061dc7512be8bcca2dce44e0b81608771714b
118
224
97
220
117
18

这是有道理的,它取前六个字节并将它们转换为小数。

我现在唯一的问题是如何把它变成一个字符串。有人提到使用操纵器?我可以举个例子吗?

最佳答案

每行缩进四个空格使其显示为代码:

// use just first 6 bytes
byte truncHmac[6];
memset( truncHmac, 0x00, 6 );
unsigned long sixdigit[6];

for (int i=0; i<=5; i++)
{
truncHmac[i]=hmacOutputBuffer[i];
sixdigit[i]=truncHmac[i];
std::cout<<sixdigit[i]<< std::endl;
}

打橙?在标记帮助编辑框的右上角。

至于操纵器,使用 stringstream 而不是 cout :

#include <sstream>

stringstream strs;

for (int i = 0; i < 6; ++i)
{
strs << hex << hmacOutputBuffer[i] << std::endl;
}

strs.str(); // returns a string object.

编辑:将循环写为 for (int i = 0; i < N; ++i)而不是 for (int i = 0; i <= N - 1; ++i)当您需要处理 C++ 迭代器时,它将更好地工作,它将结束定义为“最后一个有效元素之后的一个”。

此外,MAC 地址通常放置 -:每个字节之间的字符。 :的使用已弃用,因为 IPv6 地址也使用 : .

关于c++ - 如何将具有十六进制值的二进制数组转换为十进制,然后再转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2020541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com