c++ byte数组 如何将char数组转换成byte数组
时间:2014-04-26 12:56 来源: 我爱IT技术网 作者:山风
在c++中,c++ byte数组算是一个难点,那么如何将char数组转换成byte数组呢?我们说过c++中byte被解析为unsigned char。那么现在我们需要用c++代码实现把字符数组转换成无符号型数组,如何完成这个C++函数呢?
在c++中我们按照C风格来实现类型转换,那么我们首先想到的是使用reinterpret_cast。那么我们先来看看以下代码。
代码清单:
char *str = "1A2B" ; unsigned char *newStr; newStr = ( unsigned char *) str ; printf( "%2x" ,newStr[0]); // Output 是 30
分析以上代码:不难发现是想将char数组进行转换并传递给字节数组。那么我们或许可以参照以下代码。
代码清单:
#include
#include
typedef unsigned char u8;
inline u8 a( char **b)
{
u8 r;
if (**b>071)
r= **b-0x37;
else r = **b-060;
(*b)++;
return r;
}
void s2u( char *s, u8 *o)
{
for (;*s;o++) *o = (a(&s) << 4)|a(&s);
}
//主函数
int main()
{
char test[] = "4A464946" ;
u8* res = (u8*)malloc (128);
s2u (test, res);
printf ( "%s" , res);
free (res);
}
分析代码:实际上,这里用到了malloc,这样问题就出来了,是一个POS终端的应用程序,那就欠妥了。那么我们再来看看下面的代码。
代码清单:
int charToByteArray( unsigned int bytearray[], char *hexstring)
{
int i;
uint8_t str_len = strlen(hexstring);
memset(bytearray, 0x00, sizeof (bytearray));
for (i = 0; i < ((str_len / 2)-1); i++)
{
sscanf(hexstring + 2*i, "%02x" , &bytearray[i]);
}
return 1;
}
注意:这里运用到了c++字符转字节数组的函数构造charToByteArray(),前面定义了无符号的bytearray[],和char * bytearray[]。但其实,这并非是c++中char数组转换成byte数组的最佳方法。真正完美的代码如下:
代码清单:
int convertZeroPadedHexIntoByte( char *dataset, unsigned char *bytearray)
{
int i = strlen(dataset),j=0,counter=0;
char c[2];
unsigned int bytes[2];
for (j=0;j
{
if (0 == j%2)
{
c[0] = dataset[j];
c[1] = dataset[j+1];
sscanf(c, "%02x" , &bytes[0]); bytearray[counter] = bytes[0]; counter++;
}
}
}
更多知识点详见:http://www.52ij.com/jishu/cpp/cbyte/
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
