我开始(真正开始)一个装配工具,当时它只将十进制转换为十六进制,但我想从结果中删除零。这是代码:
// HexConvert.cpp
#include <iostream>
using namespace std;
int main()
{
int decNumber;
while (true)
{
cout << "Enter the decimal number: ";
cin >> decNumber;
// Print hexadecimal with leading zeros
cout << "Hexadecimal: ";
for (int i = 2*sizeof(int) - 1; i >= 0; i--)
{
cout << "0123456789ABCDEF"[((decNumber >> i*4) & 0xF)];
}
cout << endl;
}
return 0;
}
我该怎么做?
答案 0 :(得分:2)
你的for循环应该有两种状态:
因此,第一个州需要在打印前检查每个字符。
答案 1 :(得分:2)
怎么样:
int number = 56;
cout << hex << number;
你也可以通过stringstream来获取十六进制字符串表示,其中包含:
#include <iostream>
#include <sstream>
int main () {
int number = 45;
std::ostringstream os;
os << std::hex << number;
std::cout << os.str() << std::endl;
}
有关stringstreams和fromString / toString的更多信息:http://cplusplus.co.il/2009/08/16/implementing-tostring-and-fromstring-using-stdstringstream/
答案 2 :(得分:1)
您可以直接从C ++调用此函数,但您可能需要保存一些寄存器,这取决于编译器。尽情转换到C ++。
;number to convert in [esp+4]
;pointer to string in [esp+8]
itoh: mov edi, [esp+8] ;pointer to c string
bsr ecx, eax ;calculate highest set bit
and cl, $fc ;round down to nearest multiple of 4
loop: mov eax, [esp+4]
shr eax, cl ;mov hex digit to lowest 4 bit
and eax, $f ;mask hex digit
cmp eax, 10 ;test if digit is in A..F
jlt numdgt
add eax, 'A'-'0'-10 ;it is
numdgt: add eax, '0' ;ascii converted digit
mov [edi], al ;store to string
inc edi ;and increment pointer
sub cl,4 ;decrement loop counter
jnc loop
mov byte[edi], 0 ;terminate string
ret