50,526
社区成员
发帖
与我相关
我的任务
分享
typedef unsigned char _UCHR;
typedef int _INT ;
_INT EncPack(_UCHR * pbyInBuffer,
_UCHR * pbyOutBuffer,
_INT iInBuffLen);
_INT EncPack(_UCHR * pbyInBuffer,
_UCHR * pbyOutBuffer,
_INT iInBuffLen)
{
_UCHR n;
_INT iLen, i;
/*
* * whether InBuffer data's len can be divided by 2
*/
if (iInBuffLen % 2)
iLen = iInBuffLen + 1;
else
iLen = iInBuffLen;
for (i = 0; i < iInBuffLen; i++)
{
pbyInBuffer[i] = (_UCHR) toupper(pbyInBuffer[i]);
if (i % 2 != 0) /* if odd number */
{
n = (_UCHR) (pbyInBuffer[i] - 0x30);
/*
* * Note: 'A' = 65, 'F'= 70. 65-48 = 17, 17-7=10. *
* For example, this will convert 'A' to value 10.
*/
if (n > 9)
n = n - 7;
pbyOutBuffer[i / 2] = pbyOutBuffer[i / 2] | n;
} else
{
pbyOutBuffer[i / 2] = ((n = pbyInBuffer[i] - 0x30) > 9 ? n - 7 : n) << 4;
}
}
return (iLen / 2);
}
public class EncPack {
public static void main(String args[]) {
char[] pbyInBuffer = "54CD62031D621AE1".toCharArray() ;
char[] pbyOutBuffer = new char[8];
EncPack(pbyInBuffer, pbyOutBuffer, 16);
for(int i=0;i<8;i++)
System.out.printf("%02X ", (int)pbyOutBuffer[i] );
System.out.println();
String s = new String(pbyOutBuffer);
System.out.printf("%d,%s\n" ,s.length(),s);
for(int i=0;i<s.length();i++)
System.out.printf("%02X ", (int)s.toCharArray()[i] );
}
public static int EncPack(char[] pbyInBuffer, char[] pbyOutBuffer, int iInBuffLen)
{
char n;
int iLen, i;
/*
* * whether InBuffer data's len can be divided by 2
*/
if (iInBuffLen % 2 > 0)
iLen = iInBuffLen + 1;
else
iLen = iInBuffLen;
for (i = 0; i < iInBuffLen; i++)
{
pbyInBuffer[i] = Character.toUpperCase(pbyInBuffer[i]);
if (i % 2 != 0) /* if odd number */
{
n = (char) ((char)pbyInBuffer[i] - 0x30);
/*
* * Note: 'A' = 65, 'F'= 70. 65-48 = 17, 17-7=10. *
* For example, this will convert 'A' to value 10.
*/
if (n > 9)
n = (char)(n - 7);
pbyOutBuffer[i / 2] = (char)(pbyOutBuffer[i / 2] | n);
} else
{
//pbyOutBuffer[i / 2] = ((n = pbyInBuffer[i] - 0x30) > 9 ? n - 7 : n) << 4 ;
n = (char)(pbyInBuffer[i] - 0x30);
if( n > 9 ) n = (char)(n - 7);
pbyOutBuffer[i / 2] = (char)(n << 4);
}
}
return (iLen / 2);
}
}