我想传输一个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?
答案 0 :(得分:2)
byte[] newArray = new byte[2];
Array.Copy(response, response.Length-2, newArray, 2);
Log.CheckLastTwoBytes(newArray,expectedResponse);
答案 1 :(得分:1)
由于response[index]
的类型为byte
(不 byte[]
),因此您会收到该错误并不奇怪。
如果Log.CheckLastTwoBytes
确实只检查了其Response
参数的最后两个字节,那么您应该只传递response
:
Log.CheckLastTwoBytes(response, expectedResponse)
答案 2 :(得分:1)
new ArraySegment<byte>(response, response.Length - 2, 2).Array
编辑:没关系,显然.Array
只返回原始整个数组,而不是切片。您必须修改其他方法以接受ArraySegment而不是byte []
答案 3 :(得分: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);
可能是这个函数没有检查确切的长度等,所以你可以把最后两个字节作为前两个字节,如果你不关心破坏数据。
答案 4 :(得分:0)
或者,您也可以使用linq:
byte[] lastTwoBytes = response.Skip(response.Length-2).Take(2).ToArray();