我将简要解释一下情况并提出问题。
我有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
”
上次我问过类似的问题时,人们对使用的字节格式,字节序等提出了怀疑/兴趣。我的问题是你能说出上面使用的字节序吗?还是一些固定的格式?我应该期待一些字节序问题吗?
答案 0 :(得分:0)
实际的十六进制数字是以big-endian方式解释的,但代码看起来像是字节序中立的,并且无论你的计算机的字节顺序如何都应该有效。