格式化和写入数据

时间:2013-09-19 20:57:14

标签: c++

我将简要解释一下情况并提出问题。

我有app将一些数据写入/读取到设备(卡)。 这是一些示例代码。

首先,用户输入十六进制字符串,说“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

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

1 个答案:

答案 0 :(得分:0)

实际的十六进制数字是以big-endian方式解释的,但代码看起来像是字节序中立的,并且无论你的计算机的字节顺序如何都应该有效。