【发布时间】:2021-11-04 22:52:50
【问题描述】:
我需要关注char packet[] = {0x00,0x14}; 以通过 TCP/IP 发送,这是我让它工作的唯一方法。使用该字符,我将发送数字 20,另一个可能的示例是 char packet[] = {0x4e,0x20};,即 20000。我开始认为我完全错误地处理了这个问题。
使用此代码,我可以将 Int 的十六进制值打印出来。
#include <iostream>
using namespace std;
int main() {
int num, temp, i = 1, j,k=1, r;
char hex[50] = {};
char paket[7] = {'0','x'};
cout << "Input?";
cin >> num;
temp = num;
while (temp != 0) {
r = temp % 16;
if (r < 10)
hex[i++] = r + 48;
else
hex[i++] = r + 55;
temp = temp / 16;
}
cout << i << endl;
cout << "\nHex = ";
for (j = i; j > 0; j--) {
cout << hex[j];
switch (k)
{
case 1:
paket[2] = { hex[j] };
break;
case 2:
paket[3] = { hex[j] };
break;
case 3:
paket[4] = { hex[j] };
break;
case 4:
paket[5] = { hex[j] };
break;
}
k++;
}
cout << endl << paket;
return 0;
这部分是我试图获得所需格式的方式,但遗憾的是它不起作用。
switch (k)
{
case 1:
paket[2] = { hex[j] };
break;
case 2:
paket[3] = { hex[j] };
break;
case 3:
paket[4] = { hex[j] };
break;
case 4:
paket[5] = { hex[j] };
break;
}
k++;
【问题讨论】:
-
请不要使用magic numbers。如果
48是指'0'的 ASCII 值,则使用实际字符。 -
至于您的问题,请记住十进制、十六进制甚至八进制只是表示底层 二进制 值的不同方式。如果你想要一个十六进制数字的字符串,为什么不使用
snprintf,比如snprint, paket, sizeof paket, "0x%04x", num)?或者考虑到您正在使用 C++ 编程,请使用某种流(例如std::ostringstream)。 -
没有“十六进制值”之类的东西。计算机中的一切都是二进制的。十六进制只是人类使用的符号。您的问题不清楚。