- 论坛徽章:
- 0
|
运行结果:
tmp[] = 2 1
21
tmp[] = d f
df
tmp[] = 6 e
6e
tmp[] = 5 a
5a
tmp[] = 0 9
9
tmp[] = e 4
e4
tmp[] = 9 1
91
tmp[] = d 0
d0
tmp[] = 1 4
4e
//从这里开始发生变化了,明明tmp[]={'1','4'},转换之后就成了 4e 了
test.c 代码如下
#include "str_to_int_array.c"
#include "stdio.h"
int main()
{
int a = 0;
char *str = "10 f3 07 b7 12 4d 06 9b 31 c9 f0 00 87 43 1a 67 c0 7f 9e 2c 13 b3 90 14 d0 91 e4 09 5a 6e df 21";
guint8 *_str = NULL;
int str_len = str_to_int_array(str,&_str);
g_print("str out :\n");
for (;a < str_len; a ++)
printf(" %x",*(_str + a));
g_print("\n");
}
|
str_to_int_array 代码如下
#include "gtk/gtk.h"
#include "str_to_int_array.h"
gint str_to_int_array ( gchar *str_in, guint8 **int_out)
{
gint loop, len, size ;
gchar tmp[2];
for (loop = 0, len = 0; *(str_in + loop) != '\0' ; loop ++) //先扫描一遍
{ //得到0-9,a-f,A-F
if ( ((*(str_in + loop) >= '0') && (*(str_in + loop) <= '9')) //的个数
|| ((*(str_in + loop) >= 'a') && (*(str_in + loop) <= 'f'))
|| ((*(str_in + loop) >= 'A') && (*(str_in + loop) <= 'F')) )
len ++;
}
size = (len + 1) / 2;
len = size ;
*int_out = g_malloc0 ( size );
for (loop --; loop >= 0; loop-- )
{
if ( *(str_in + loop) != ' ' && *(str_in + loop - 1) != ' ' )
{
tmp[1] = *(str_in + loop-- );
tmp[0] = *(str_in + loop );
g_print ("tmp[] = %c %c\n",tmp[0],tmp[1]);
size --;
*(*int_out + size) = ( guint8 )strtol(tmp,NULL,16);
g_print (" %x \n" , *(*int_out + size));
}
}
return len;
} |
[ 本帖最后由 daschina 于 2009-5-5 22:24 编辑 ] |
|