|
|
发表于 2010-1-19 19:51:31
|
显示全部楼层
util.cpp
#include "util.h"
6 G2 E2 u# P5 b, `#include <vector>
- b0 f* v; c8 D5 _) U
% K, k; O4 f6 X c7 Xusing namespace std; 1 G7 `3 Y& Q/ { D- Q% z
$ ?) |1 z5 D/ uchar intToHexChar(int x) { 0 I1 y, {0 R% Q" k' j) f4 Z
static const char HEX[16] = { # j ]# d! l% Y; t6 ^
'0', '1', '2', '3', 6 ~' I7 b, }% z- l+ m
'4', '5', '6', '7',
$ I+ J0 p. r. ^7 p+ c. z '8', '9', 'A', 'B',
) @8 ]3 {: _% l 'C', 'D', 'E', 'F'
/ \' R) q( L. ^4 Q+ E% i% z }; ! k, w8 m2 j: ~, ~+ K; `
return HEX[x]; 5 Y% [8 b: t6 N) t7 E5 v
}
! p; q ?/ p0 U, R9 T% V. D + P9 i6 v7 u) l1 g- Z
int hexCharToInt(char hex) {
& H$ w( A7 U& E hex = toupper(hex); : [/ A8 f/ L9 j a, x- G
if (isdigit(hex)) ; r% t* W+ n4 j$ c( P0 F
return (hex - '0'); ' n- e2 d$ L1 e7 C8 v( Z$ j2 O
if (isalpha(hex)) 7 S% B) l9 Y, \4 C& F$ U
return (hex - 'A' + 10); * p* S& l# U( @9 }% E
return 0; / y& Q" z( Q# D8 [
} ( m. m* a3 w" n7 v( S z0 j% f
- K8 u Q6 c$ G. ]0 f* m% h
string bytesToHexString(const byte *in, size_t size) { . g) k! C* Q! }6 U' B# m
string str;
1 W, i6 g# e' t9 p2 G! U for (size_t i = 0; i < size; ++i) { - i+ y- E! D4 E4 q
int t = in[i];
5 ~ O8 g# }, j$ x int a = t / 16;
+ W* E2 K4 H1 O. G6 X3 @/ p# g int b = t % 16; 8 O. X8 H% k0 b- b
str.append(1, intToHexChar(a));
' U( W9 c6 d' y str.append(1, intToHexChar(b));
( Y, o) T, {* ^: x if (i != size - 1) . ~6 k) P- y, L+ D: ?. `( U" }* q
str.append(1, ' ');
/ G4 x5 U2 f/ C. {$ E3 I } . ]1 v$ e6 D4 Y/ k% q
return str; ) C4 G& A7 G6 N+ B' _
}
) Q1 O0 f5 _& Q7 ?; B; U. v2 w $ ?: d# k2 k# l5 C2 ]
size_t hexStringToBytes(const string &str, byte *out) { , I, j: t3 }* a9 A
6 L+ W. ~' {5 P& D1 Z) \+ \" ]: | vector<string> vec; - y3 S' V4 W0 B; s x
string::size_type currPos = 0, prevPos = 0; ! U% I6 ]6 h" r2 A4 x) W
while ((currPos = str.find(' ', prevPos)) != string::npos) {
! f2 X5 q Q, g4 h+ \ ~/ P string b(str.substr(prevPos, currPos - prevPos)); $ a) @) \3 @) h7 x
vec.push_back(b); 5 ^- c0 H# a( y/ N
prevPos = currPos + 1;
1 d& z$ ]. h, k" c* C2 F } 9 v- x& v: g& y7 J# f* A
if (prevPos < str.size()) { 7 s6 X) t2 f+ L! k, Y% {
string b(str.substr(prevPos)); : t3 Z' ]6 c4 Z, ]6 t! D1 i7 ]
vec.push_back(b);
S4 [3 D4 v0 ?( q- }) J, ~$ J }
- R- a: } C7 {$ k" P( P* p7 | typedef vector<string>::size_type sz_type;
8 I7 i9 E5 {+ B. T2 X/ z% ] sz_type size = vec.size();
6 r t5 J. m l. O: p for (sz_type i = 0; i < size; ++i) {
# c# a6 k n2 b% V% Q3 R$ b a; T int a = hexCharToInt(vec[i][0]);
0 }1 _3 S8 Z( _9 |, T5 d5 w int b = hexCharToInt(vec[i][1]);
$ [- d2 y7 M( K g out[i] = a * 16 + b;
0 K2 y# ?& R: d3 @+ @6 m } ( D- {, G* S6 [. A! j! ], m
return size; / J9 {& T( m, q" N" T
} |
|