0

我将简要解释一下情况并转向这个问题。

我有向设备(卡)写入/读取一些数据的应用程序。这是一些示例代码。

首先用户输入十六进制字符串,说“ 00000000000000000000AABBEEAABBEE”(这应该是 16 个字节)。

现在要将这些数据写入卡,它正在转换为字节数组。

for(int i=0,m=0; i < size; i+=2,m++)
{
        char ch1, ch2;
        ch1=(char)str[i]; // str is hex string
        ch2=(char)str[i+1];
        int dig1, dig2;
        if(isdigit(ch1)) dig1 = ch1 - '0';
        else if(ch1>='A' && ch1<='F') dig1 = ch1 - 'A' + 10;
        else if(ch1>='a' && ch1<='f') dig1 = ch1 - 'a' + 10;
        if(isdigit(ch2)) dig2 = ch2 - '0';
        else if(ch2>='A' && ch2<='F') dig2 = ch2 - 'A' + 10;
        else if(ch2>='a' && ch2<='f') dig2 = ch2 - 'a' + 10;
        array1[m] = (char)(dig1*16 + dig2); // output byte array
}

现在,这个字节数组被发送到设备,很容易像这样:

 unsigned char sendBuff[16];
 for(int i=0;i<16;i++)
      sendBuff[i]=array1[i];

并调用发送命令,例如Send(sendBuff, 16)

读取也很容易,我们称Receive(receiveBuffer);现在receiveBuffer包含我们存储的字节数组。我们将其转换回十六进制:

 for(k=0;k<16;k++)
 {
      data[k*2]=hexval[((receiveBuffer[k]>>4)&0xF)];
      data[(k*2)+1]=hexval[receiveBuffer[k]&0x0F];  
 }

现在data包含:“ 00000000000000000000AABBEEAABBEE

上次我问了类似的问题,人们对使用的字节格式、字节序等提出了怀疑/兴趣。我的问题是你能说出上面使用了什么字节序吗?还是某种固定格式?我应该期待一些字节顺序问题吗?

4

1 回答 1

0

实际的十六进制数字是以大端方式解释的,但代码看起来是中立的,无论您的计算机的字节序如何,都应该可以工作。

于 2013-09-19T21:00:17.500 回答