0

我想发送一个 APDU 并得到响应。我想通过一个将记录比较的 API 检查最后两个字节。

byte[] response = Transmit(apdu);

//response here comes will be 0x00 0x01 0x02 0x03 0x04 
//response.Length will be 5


byte[] expectedResponse = { 0x03, 0x04 };

int index = (response.Length)-2;

Log.CheckLastTwoBytes(response[index],expectedResponse);

//The declaration of CheckLastTwoBytes is 
//public static void CheckLastTwoBytes(byte[] Response, byte[] ExpResp)

这是无效参数的错误。如何将最后 2 个字节传递给 API?

4

5 回答 5

3

使用Array.Copy

byte[] newArray = new byte[2];
Array.Copy(response, response.Length-2, newArray, 2);
Log.CheckLastTwoBytes(newArray,expectedResponse);
于 2012-11-29T03:18:39.287 回答
1

由于 of 的类型response[index]byte( not byte[] ),因此您会收到该错误也就不足为奇了。

如果Log.CheckLastTwoBytes确实只检查其Response参数的最后两个字节,那么您应该只通过response

   Log.CheckLastTwoBytes(response, expectedResponse)
于 2012-11-29T03:23:41.040 回答
1

你不能像那样有一个子数组,不......

第一个解决方案,显而易见的一个:

var tmp = new byte[] { response[response.Length - 2],
                       response[response.Length - 1] };

Log.CheckLastTwoBytes(tmp, expectedResponse);

或者,您可以这样做:

response[0] = response[response.Length - 2];
response[1] = response[response.Length - 1];

Log.CheckLastTwoBytes(response, expectedResponse);

可能是这个函数不检查确切的长度等,所以如果你不关心破坏数据,你可以把最后两个字节作为前两个字节。

于 2012-11-29T03:44:51.727 回答
1
new ArraySegment<byte>(response, response.Length - 2, 2).Array

编辑:没关系,显然.Array只是返回原始的整个数组而不是切片。您必须修改其他方法以接受 ArraySegment 而不是 byte[]

于 2012-11-29T03:26:32.220 回答
0

或者,您也可以使用 linq:

byte[] lastTwoBytes = response.Skip(response.Length-2).Take(2).ToArray();
于 2012-11-29T03:22:29.500 回答