有没有二进制与ascii码互转的算法
有没有好一点的算法实现下面两个二进制与可见字符互转的函数
(算法尽量简单,速度尽量快,且二进制转换后增存的空间尽量少)
string BinToString(const char *buffer, size_t len); //将二进制转成可见ascii码字符void StringToBin(const string& str, char *buffer, size_t len); //将二进制转成可见ascii码字符
string BinToString(const char *buffer, size_t len) { //将二进制转成可见ascii码字符 static string str; static char s[10000]; int i,L; L=len; if (L>10000) L=10000;//忽略10000个后面的数据 s[0]=0; for (i=0;i<L;i++) { sprintf(s,"%s%02x",buffer[i]); } str=s; return str;}void StringToBin(const string& str, char *buffer, size_t len) { //将二进制转成可见ascii码字符 static char s[10000]; int i,L; strncpy(s,str.c_str(),20000); L=strlen(s)/2; if (L>len) L=len; for (i=0;i<L;i++) { sscanf(s+i*2,"%02x",&buffer[i]); }}
[解决办法]
上面代码中
sprintf(s,"%s%02x",buffer[i]);
应改为
sprintf(s,"%s%02x",s,buffer[i]);
[解决办法]
const char *tobin = "01";void CharToBin(unsigned char *out,const unsigned char *in,int len){ int i = 0,j = 7; while(i < len) { for (j=7; j>=0; j--) *out++ = tobin[(in[i] >> j) & 0x01]; ++i; } }const char *todec = "0123456789" ;void CharToDec(unsigned char *out,const unsigned char *in,int len) { int i = 0; while(i < len) { *out++ = todec[in[i] / 100]; *out++ = todec[(in[i] % 100) / 10]; *out++ = todec[in[i] % 10]; ++i; } } const char *tohex = "0123456789ABCDEF"; void CharToHex(unsigned char *out,const unsigned char *in,int len) { int i = 0; while(i < len) { *out++ = tohex[in[i] >> 4]; *out++ = tohex[in[i] & 0x0F]; ++i; } } const char *tooct = "01234567"; void CharToOct(unsigned char *out,const unsigned char *in,int len) { int i = 0; while(i < len) { *out++ = tooct[in[i] >> 6]; *out++ = tooct[(in[i] >> 3) & 0x07]; *out++ = tooct[in[i] & 0x07]; ++i; } } void BinToChar(unsigned char *out,const unsigned char *in,int inlen){ int i = 0,j = 0,q = 0; for(q=0; q<inlen;) { out[i] = 0; for (j=0; j<8; j++) out[i] |= (in[q++] - '0') << (7-j); i++; }}void DecToChar(unsigned char *out,const unsigned char *in,int inlen){ int i = 0,q = 0; for(q=0; q<inlen; q+=3) { out[i] = (in[q] - '0') * 100; out[i] |= (in[q+1] - '0') * 10; out[i++] |= (in[q+2] - '0'); }}void HexToChar(unsigned char *out,const unsigned char *in,int inlen){ int i = 0,q = 0; for(q=0; q<inlen; q+=2) { out[i] = CharToNum(in[q]) << 4; out[i++] |= CharToNum(in[q+1]); }}void OctToChar(unsigned char *out,const unsigned char *in,int inlen){ int i = 0,q = 0; for(q=0; q<inlen; q+=3) { out[i] = (in[q] - '0') << 6; out[i] |= (in[q+1] - '0') << 3; out[i++] |= (in[q+2] - '0'); }}
[解决办法]