【发布时间】:2017-09-11 01:29:32
【问题描述】:
我编写了一个程序,它设置了一个客户端/服务器 TCP 套接字,用户通过该套接字通过使用终端接口向服务器发送一个整数值。在服务器端,我正在执行字节命令,我需要将十六进制值存储在我的数组中。
sprint(mychararray, %X, myintvalue);
此代码采用我的整数并将其作为十六进制值打印到 char 数组中。唯一的问题是当我使用该数组来设置我的命令时,它会注册为 ascii 字符。因此,例如,如果我发送一个等于 3000 的整数,它将转换为 0x0BB8,然后存储为 'B''B''8' 对应于十六进制的 42 42 38。我到处寻找解决方案,但无法提出解决方案。
终于想出了解决我问题的方法。首先,我创建了一个数组并将 1 - 256 的所有十六进制值存储在其中。
char m_list[256]; //array defined in class
m_list[0] = 0x00; //set first array index to zero
int count = 1; //count variable to step through the array and set members
while (count < 256)
{
m_list[count] = m_list[count -1] + 0x01; //populate array with hex from 0x00 - 0xFF
count++;
}
接下来,我创建了一个函数,可让我将十六进制值分组为单个字节并存储到将要处理我的命令的数组中。
void parse_input(char hex_array[], int i, char ans_array[])
{
int n = 0;
int j = 0;
int idx = 0;
string hex_values;
while (n < i-1)
{
if (hex_array[n] = '\0')
{
hex_values = '0';
}
else
{
hex_values = hex_array[n];
}
if (hex_array[n+1] = '\0')
{
hex_values += '0';
}
else
{
hex_values += hex_array[n+1];
}
cout<<"This is the string being used in stoi: "<<hex_values; //statement for testing
idx = stoul(hex_values, nullptr, 16);
ans_array[j] = m_list[idx];
n = n + 2;
j++;
}
}
这个函数会在我之前的代码之后被调用。
sprint(mychararray, %X, myintvalue);
void parse_input(arrayA, size of arrayA, arrayB)
示例:arrayA = 8byte char 数组,arrayB 是 4byte char 数组。 arrayA 应该是 arrayB 大小的两倍,因为您正在获取两个 ascii 值并制作一个字节对。例如 'A' 'B' = 0xAB
【问题讨论】:
-
你在寻找什么输出方面
-
如果你只是想让 0BB8 出现在十六进制编辑器中,你只需要写数字而不是 char 数组,如果你使用 char 数组,你会得到 0BB8 字母的 ascii 值
-
我假设您正在写入二进制文件,如果您只是写入整数
-
就输出而言,我需要一个十六进制值,但我不只是想要输出,或者我可以使用 printf。我需要存储该十六进制值,以便我可以使用它。这些值由我的 rpi 作为命令传入。例如,如果一个命令需要一个 16 位无符号整数,我需要将其传递 0x0F8A(一些十六进制值)以便它能够读取它。
标签: c++ arrays raspberry-pi hex ascii