|
|
发表于 2010-1-19 19:51:31
|
显示全部楼层
util.cpp
#include "util.h"
& V* n4 s6 I1 T" }% N! f#include <vector>
: d# t0 Q% O* Y. t# A8 w, Y! j( p
7 s# a: D- O4 [8 |' dusing namespace std;
, M% Q6 r2 X# i" g
& ?$ y- s* i. \. U3 p' o/ hchar intToHexChar(int x) { - P: L, C1 a4 L& y+ F) O0 }( V
static const char HEX[16] = {
% g" {- z' Q6 m& y '0', '1', '2', '3', 9 e7 Z" F5 z, y5 ?$ s2 i5 j' N
'4', '5', '6', '7', # d5 K: f" k" \
'8', '9', 'A', 'B',
4 n: N/ K) j$ o) m; R& g 'C', 'D', 'E', 'F'
" l$ S) R7 s. p b1 s5 H @ };
9 _4 _7 |9 N1 Z' J, _ return HEX[x]; + D8 u* \% h/ R% O0 g! I
}
: m. X% {, \; `1 v, @
d; D/ N9 @& S& N+ Xint hexCharToInt(char hex) {
2 p' w/ ^9 I0 T& Z& T: \% ? hex = toupper(hex);
2 v) P: @0 G Z& M- i if (isdigit(hex))
{; p, H3 D; P. x return (hex - '0'); 0 L, Y( R2 M* `6 u7 d. \
if (isalpha(hex))
9 E# t1 L5 x3 _/ Z& f( O& [ return (hex - 'A' + 10); & E4 ?6 k c1 M) s
return 0;
% r7 d; L$ S. E/ Z7 ~% a+ Z}
# f$ a' ]; `/ o; _5 ~ : W( U/ ^" V5 @
string bytesToHexString(const byte *in, size_t size) { - O3 u1 |2 ?6 o. B+ y/ s
string str;
K7 s* t, _- T7 } for (size_t i = 0; i < size; ++i) { ) W5 m4 ?$ `. d1 i0 h+ g3 r O
int t = in[i]; 7 L8 W3 u+ s* b# f; F9 r
int a = t / 16;
, L9 u8 i6 F! S1 V( }3 a9 u! _! n' b int b = t % 16;
, C! k# E7 d9 _6 F str.append(1, intToHexChar(a)); % m3 n" B; v- l: D. n
str.append(1, intToHexChar(b));
5 H! M% E( r, E* m9 m' X if (i != size - 1)
, B r ^, h, k m0 n str.append(1, ' '); : a4 t( h( J; L5 i. C1 ?% C# H
} ) u! I s% R; P" W* [7 T
return str;
- B2 F" i3 Y# j}
- @. W4 w; j8 g z. d# D5 S4 V9 f
$ J* r7 s& b3 T9 A' A/ z* L8 tsize_t hexStringToBytes(const string &str, byte *out) { F& ~8 ?3 A% d) S7 W
: [: O( L. s9 w0 n7 J" q vector<string> vec; , J0 o! b9 F9 b' V/ s
string::size_type currPos = 0, prevPos = 0;
: Z; e, C& S# |) `: w6 W while ((currPos = str.find(' ', prevPos)) != string::npos) {
9 n- z k* s& k' E' C" [! c string b(str.substr(prevPos, currPos - prevPos)); " U0 E0 P- L r4 _3 x' S
vec.push_back(b);
' I2 O8 W, l1 F( N2 U prevPos = currPos + 1;
/ K1 u' X ~- {+ {4 B$ g- Q+ U }
1 g/ [$ R8 t2 O( j" R' z if (prevPos < str.size()) {
& X2 ^2 Y V3 `. `8 B string b(str.substr(prevPos));
& W; K" h0 y7 d' {" ^ vec.push_back(b); . t2 o9 q+ y+ w O
}
v- e, s4 F+ w; n# `% o typedef vector<string>::size_type sz_type;
; x' q( ^6 b6 P* V: w sz_type size = vec.size(); " A, k5 E! E* ]6 d: u
for (sz_type i = 0; i < size; ++i) {
, _7 v; y5 I3 _6 E5 S5 z) O5 {5 W( `* f; H int a = hexCharToInt(vec[i][0]);
! F% d! G } [ int b = hexCharToInt(vec[i][1]);
8 y& M/ d& _, o; o out[i] = a * 16 + b;
% `' }4 M2 Y( f/ b }
# X: I1 y% g) M# Y# N9 M) h2 b. C/ B. H return size; 1 O" ]+ F1 A j& m; B, j. E8 m: h3 t
} |
|