23 个解决方案
#1
每8位截一下,转成10进制,就是ASCII码了,然后转成字符
#2
比如二进制:01000001
先变成十进制:65
再变成ascii: 'A'
先变成十进制:65
再变成ascii: 'A'
#3
转成ASCII码后怎么转字符呢,有具体的代码函数吗?
#4
int i = 65;
char ch = (char)i;
一个强制类型转换
#5
用chr(65)得到A
#6
没这简单
目前还没有字符串转二进制比特位的函数。
不过你可以使用atoi()将字符串读为整形,然后逐位与0,1比较,每8位一字节对象ASII的一个字节
#7
http://www.cnblogs.com/luhuan860/archive/2009/09/15/1566822.html
#8
谢谢各位,还有弱弱的问下二进制怎么转十进制,我是新手 现在用MFC写程序 网上查到的很多都是C些的 编译不通过的。
#9
int et_math_pow(int base, int exp)
{
int i = 0;
int result = base;
if(base == 0)
{
return 0;
}
if(exp == 0)
{
return 1;
}
for(i = 1; i < exp; i++)
{
result *= base;
}
return result;
}
char *et_str_bin2dec(char *dst, const char *src)
{
int len = strlen(src);
int i = 0;
int sum = 0;
int pow = 0;
if(len <= 0)
{
return dst;
}
for(i = len - 1; i >= 0; i--)
{
if(src[i] != '0')
{
sum += et_math_pow(2,pow);
}
pow++;
}
sprintf(dst,"%d",sum);
return dst;
}
里面et_str_bin2dec就是二进制字符,转10进制字符
#10
我说,楼主
、你确定你这一串二进制字符,能得到Password
我看是不行啊,肉眼看就不行
因为,单看第一个00001010,这是10啊,根本就不是个字母
、你确定你这一串二进制字符,能得到Password
我看是不行啊,肉眼看就不行
因为,单看第一个00001010,这是10啊,根本就不是个字母
#11
你的算法是什么了,然后再按照制定的算法加密解密。
#12
雪亮的眼神啊~~
实情是这样的:我要从INI文件中读取节点 但是节点是二进制的:
[00100010100001100010111010000110]
0000101010000110110011101100111011101110111101100100111000100110=0101101111010011100110111001101110111011101000110001101101110011
1010101011001110101001100100111001110010100001101011011010100110=1001101111010011
0010001010000110001011101000011001000010100001101100111010100110=11110111110101110100011100011111100111111100101110011011011110111111001111100011
0001001011110110110011100010111001110010100001101011011010100110=00100001011011111111011100111111111101110001111111010111010111111111011101001111
我只是表达下这样的需求,我需要还原为字符才能用。我只能用cstring得到这些二进制的值 怎么还原为字符呢?
#13
0111000001100001011100110111001101110111011011110111001001100100
我特地做了个实验
上面一串字符才可以获得password (全小写的)
我特地做了个实验
上面一串字符才可以获得password (全小写的)
#14
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *et_str_pre(const char *pre, char *src)
{
int len = strlen(pre) + strlen(src);
char *tmp = (char *)malloc((len + 1) * sizeof(char));
strcpy(tmp,pre);
strcat(tmp,src);
strcpy(src,tmp);
free(tmp);
return src;
}
char *et_str_rev(char *src)
{
int len = strlen(src);
int i = 0;
char ch;
if(len <= 1)
{
return src;
}
for(i = 0; i < len / 2; i++)
{
ch = src[i];
src[i] = src[len - i - 1];
src[len - i - 1] = ch;
}
return src;
}
int et_math_pow(int base, int exp)
{
int i = 0;
int result = base;
if(base == 0)
{
return 0;
}
if(exp == 0)
{
return 1;
}
for(i = 1; i < exp; i++)
{
result *= base;
}
return result;
}
char *et_str_lpad(char *src, char *pad_str, size_t pad_len)
{
size_t i = 0;
int src_len = strlen(src);
int total_len = src_len + pad_len * strlen(pad_str);
//strcpy(src,pad_str);
for(i = 0; i < pad_len; i++)
{
et_str_pre(pad_str,src);
}
src[total_len] = '\0';
return src;
}
char *et_str_pad(char *src, char *pad_str, size_t total_len)
{
if(strlen(src) >= total_len)
{
return src;
}
et_str_lpad(src,pad_str,(total_len - strlen(src)) / strlen(pad_str));
return src;
}
char *et_str_i2s(int num, char *dst)
{
sprintf(dst,"%d",num);
return dst;
}
char *et_str_dec2bin(char *dst, const char *src)
{
int num = atoi(src);
char tmp_str[50] = {'\0'};
int tmp_quotient = num;
int tmp_remainder = 0;
int pos = 0;
while(tmp_quotient / 2 != 0)
{
tmp_remainder = tmp_quotient % 2;
tmp_quotient = tmp_quotient / 2;
if(tmp_remainder == 0)
{
tmp_str[pos++] = '0';
}
else
{
tmp_str[pos++] = '1';
}
}
if(tmp_quotient == 1)
{
tmp_str[pos++] = '1';
}
strcpy(dst,et_str_rev(tmp_str));
return dst;
}
char *et_str_bin2dec(char *dst, const char *src)
{
int len = strlen(src);
int i = 0;
int sum = 0;
int pow = 0;
if(len <= 0)
{
return dst;
}
for(i = len - 1; i >= 0; i--)
{
if(src[i] != '0')
{
sum += et_math_pow(2,pow);
}
pow++;
}
sprintf(dst,"%d",sum);
return dst;
}
int main()
{
//char str[100] = "0000101010000110110011101100111011101110111101100100111000100110";
char str[100] = "0111000001100001011100110111001101110111011011110111001001100100";
//char arr[10][10] = {{0}};
char dst[10] = {0};
char temp_bin[10] = {0};
char temp_dec[10] = {0};
//char temp_fix[10] = {0};
int temp_int = 0;
char *password = "password";
int i = 0;
for(i = 0; i < 8; i++)
{
strncpy(temp_bin,str + i * 8,8);
et_str_bin2dec(temp_dec,temp_bin);
//printf("\n %s %s\n",temp_bin,temp_dec);
dst[i] = atoi(temp_dec);
//printf("-%d-",dst[i]);
}
//for(i = 0; i < 8; i++)
//{
// temp_int = (unsigned int)password[i];
// et_str_i2s(temp_int,temp_dec);
// et_str_dec2bin(temp_bin,temp_dec);
// et_str_pad(temp_bin,"0",8);
// //strncpy(temp_bin,str + i * 8,8);
// et_str_bin2dec(temp_dec,temp_bin);
// //printf("\n %s %s\n",temp_bin,temp_dec);
// //dst[i] = atoi(temp_dec);
// printf("%s",temp_bin);
//}
printf("-%s-",dst);
//printf("\n p %d\n",'p');
getchar();
return 0;
}
这段代码可以获取到password,有点长
很多都是我自己的函数库,我临时COPY出来用的
#15
头大..还要去转unicode 不过还是谢谢先~
#16
void et_str_bin2str(char *dst, const char *src, size_t char_len)
{
size_t total = 0;
size_t count = 0;
char temp_bin[20] = {0};
char temp_dec[20] = {0};
int temp_int = 0;
size_t i = 0;
total = strlen(src);
count = total/char_len;
for(i = 0; i < count; i++)
{
strncpy(temp_bin,src + i * char_len,char_len);
et_str_bin2dec(temp_dec,temp_bin);
//printf("\n %s %s\n",temp_bin,temp_dec);
dst[i] = atoi(temp_dec);
//printf("-%d-",dst[i]);
}
}
void et_str_str2bin(char *dst, const char *src, size_t char_len)
{
char temp_bin[10] = {0};
char temp_dec[10] = {0};
int temp_int = 0;
size_t src_len = strlen(src);
size_t i = 0;
dst[0] = '\0';
for(i = 0; i < src_len; i++)
{
temp_int = (unsigned int)src[i];
et_str_i2s(temp_int,temp_dec);
et_str_dec2bin(temp_bin,temp_dec);
et_str_pad(temp_bin,"0",8);
et_str_bin2dec(temp_dec,temp_bin);
strcat(dst,temp_bin);
}
}
我顺便也封装了这两个函数
转UNICODE的函数我有
#17
wchar_t *et_wcs_mbs2wcs(wchar_t *dst,const char *src)
{
int src_len = strlen(src);
mbstowcs(dst,src,src_len + 1);
dst[src_len] = '\0';
return dst;
}
char *et_wcs_wcs2mbs(char *dst,const wchar_t *src)
{
int src_len = wcslen(src);
wcstombs(dst,src,src_len * 2 + 1);
dst[src_len * 2] = '\0';
return dst;
}
#18
原理主要是用wcstombs,mbstowcs
你自己也可以去封装成适合你自己用的函数
你自己也可以去封装成适合你自己用的函数
#19
void Trn(char *S,int SL,char *O)
{
char *p=S;
for(int i=0,n=SL/8;i<n;++i){
O[i]=0;
for(int j=0;j<7;++j,p++)
O[i] |= *p - '0',O[i]<<=1;
O[i] |= *p++ - '0';}
O[SL/8]=0;
}
int main()
{
char *s1="0111000001100001011100110111001101110111011011110111001001100100";
int n = strlen(s1);
char *buf = new char[n+1];
Trn(s1,n,buf);
cout << buf;
return 0;
}
{
char *p=S;
for(int i=0,n=SL/8;i<n;++i){
O[i]=0;
for(int j=0;j<7;++j,p++)
O[i] |= *p - '0',O[i]<<=1;
O[i] |= *p++ - '0';}
O[SL/8]=0;
}
int main()
{
char *s1="0111000001100001011100110111001101110111011011110111001001100100";
int n = strlen(s1);
char *buf = new char[n+1];
Trn(s1,n,buf);
cout << buf;
return 0;
}
#20
void Trn(char *S,int SL,char *O)
{
char *p=S;
for(int i=0,n=SL/8;i<n;++i){
O[i]=0;
for(int j=0;j<7;++j,p++)
O[i] |= *p - '0',O[i]<<=1;
O[i] |= *p++ - '0';}
O[SL/8]=0;
}
int main()
{
char *s1="0111000001100001011100110111001101110111011011110111001001100100";
int n = strlen(s1);
char *buf = new char[n+1];
Trn(s1,n,buf);
cout << buf;
delete []buf;
return 0;
}
#21
右移。
强制转换。
不就可以么?
强制转换。
不就可以么?
#22
CString strText(_T("0111000001100001011100110111001101110111011011110111001001100100"));
CString strMsg(_T(""));
CString strTmp(_T(""));
while(TRUE)
{
strTmp = strText.Left(8);
BYTE b = (BYTE)_tcstoul(strTmp, NULL, 2);
strMsg += CString(b);
strText = strText.Mid(8);
if(strText.IsEmpty())
break;
}
AfxMessageBox(strMsg);
#23
错误 8 error C2440: “<function-style-cast>”: 无法从“BYTE”转换为“CString” e:\faceoline\faceonline\faceonline\faceonlinedlg.cpp 631
#1
每8位截一下,转成10进制,就是ASCII码了,然后转成字符
#2
比如二进制:01000001
先变成十进制:65
再变成ascii: 'A'
先变成十进制:65
再变成ascii: 'A'
#3
转成ASCII码后怎么转字符呢,有具体的代码函数吗?
#4
int i = 65;
char ch = (char)i;
一个强制类型转换
#5
用chr(65)得到A
#6
没这简单
目前还没有字符串转二进制比特位的函数。
不过你可以使用atoi()将字符串读为整形,然后逐位与0,1比较,每8位一字节对象ASII的一个字节
#7
http://www.cnblogs.com/luhuan860/archive/2009/09/15/1566822.html
#8
谢谢各位,还有弱弱的问下二进制怎么转十进制,我是新手 现在用MFC写程序 网上查到的很多都是C些的 编译不通过的。
#9
int et_math_pow(int base, int exp)
{
int i = 0;
int result = base;
if(base == 0)
{
return 0;
}
if(exp == 0)
{
return 1;
}
for(i = 1; i < exp; i++)
{
result *= base;
}
return result;
}
char *et_str_bin2dec(char *dst, const char *src)
{
int len = strlen(src);
int i = 0;
int sum = 0;
int pow = 0;
if(len <= 0)
{
return dst;
}
for(i = len - 1; i >= 0; i--)
{
if(src[i] != '0')
{
sum += et_math_pow(2,pow);
}
pow++;
}
sprintf(dst,"%d",sum);
return dst;
}
里面et_str_bin2dec就是二进制字符,转10进制字符
#10
我说,楼主
、你确定你这一串二进制字符,能得到Password
我看是不行啊,肉眼看就不行
因为,单看第一个00001010,这是10啊,根本就不是个字母
、你确定你这一串二进制字符,能得到Password
我看是不行啊,肉眼看就不行
因为,单看第一个00001010,这是10啊,根本就不是个字母
#11
你的算法是什么了,然后再按照制定的算法加密解密。
#12
雪亮的眼神啊~~
实情是这样的:我要从INI文件中读取节点 但是节点是二进制的:
[00100010100001100010111010000110]
0000101010000110110011101100111011101110111101100100111000100110=0101101111010011100110111001101110111011101000110001101101110011
1010101011001110101001100100111001110010100001101011011010100110=1001101111010011
0010001010000110001011101000011001000010100001101100111010100110=11110111110101110100011100011111100111111100101110011011011110111111001111100011
0001001011110110110011100010111001110010100001101011011010100110=00100001011011111111011100111111111101110001111111010111010111111111011101001111
我只是表达下这样的需求,我需要还原为字符才能用。我只能用cstring得到这些二进制的值 怎么还原为字符呢?
#13
0111000001100001011100110111001101110111011011110111001001100100
我特地做了个实验
上面一串字符才可以获得password (全小写的)
我特地做了个实验
上面一串字符才可以获得password (全小写的)
#14
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *et_str_pre(const char *pre, char *src)
{
int len = strlen(pre) + strlen(src);
char *tmp = (char *)malloc((len + 1) * sizeof(char));
strcpy(tmp,pre);
strcat(tmp,src);
strcpy(src,tmp);
free(tmp);
return src;
}
char *et_str_rev(char *src)
{
int len = strlen(src);
int i = 0;
char ch;
if(len <= 1)
{
return src;
}
for(i = 0; i < len / 2; i++)
{
ch = src[i];
src[i] = src[len - i - 1];
src[len - i - 1] = ch;
}
return src;
}
int et_math_pow(int base, int exp)
{
int i = 0;
int result = base;
if(base == 0)
{
return 0;
}
if(exp == 0)
{
return 1;
}
for(i = 1; i < exp; i++)
{
result *= base;
}
return result;
}
char *et_str_lpad(char *src, char *pad_str, size_t pad_len)
{
size_t i = 0;
int src_len = strlen(src);
int total_len = src_len + pad_len * strlen(pad_str);
//strcpy(src,pad_str);
for(i = 0; i < pad_len; i++)
{
et_str_pre(pad_str,src);
}
src[total_len] = '\0';
return src;
}
char *et_str_pad(char *src, char *pad_str, size_t total_len)
{
if(strlen(src) >= total_len)
{
return src;
}
et_str_lpad(src,pad_str,(total_len - strlen(src)) / strlen(pad_str));
return src;
}
char *et_str_i2s(int num, char *dst)
{
sprintf(dst,"%d",num);
return dst;
}
char *et_str_dec2bin(char *dst, const char *src)
{
int num = atoi(src);
char tmp_str[50] = {'\0'};
int tmp_quotient = num;
int tmp_remainder = 0;
int pos = 0;
while(tmp_quotient / 2 != 0)
{
tmp_remainder = tmp_quotient % 2;
tmp_quotient = tmp_quotient / 2;
if(tmp_remainder == 0)
{
tmp_str[pos++] = '0';
}
else
{
tmp_str[pos++] = '1';
}
}
if(tmp_quotient == 1)
{
tmp_str[pos++] = '1';
}
strcpy(dst,et_str_rev(tmp_str));
return dst;
}
char *et_str_bin2dec(char *dst, const char *src)
{
int len = strlen(src);
int i = 0;
int sum = 0;
int pow = 0;
if(len <= 0)
{
return dst;
}
for(i = len - 1; i >= 0; i--)
{
if(src[i] != '0')
{
sum += et_math_pow(2,pow);
}
pow++;
}
sprintf(dst,"%d",sum);
return dst;
}
int main()
{
//char str[100] = "0000101010000110110011101100111011101110111101100100111000100110";
char str[100] = "0111000001100001011100110111001101110111011011110111001001100100";
//char arr[10][10] = {{0}};
char dst[10] = {0};
char temp_bin[10] = {0};
char temp_dec[10] = {0};
//char temp_fix[10] = {0};
int temp_int = 0;
char *password = "password";
int i = 0;
for(i = 0; i < 8; i++)
{
strncpy(temp_bin,str + i * 8,8);
et_str_bin2dec(temp_dec,temp_bin);
//printf("\n %s %s\n",temp_bin,temp_dec);
dst[i] = atoi(temp_dec);
//printf("-%d-",dst[i]);
}
//for(i = 0; i < 8; i++)
//{
// temp_int = (unsigned int)password[i];
// et_str_i2s(temp_int,temp_dec);
// et_str_dec2bin(temp_bin,temp_dec);
// et_str_pad(temp_bin,"0",8);
// //strncpy(temp_bin,str + i * 8,8);
// et_str_bin2dec(temp_dec,temp_bin);
// //printf("\n %s %s\n",temp_bin,temp_dec);
// //dst[i] = atoi(temp_dec);
// printf("%s",temp_bin);
//}
printf("-%s-",dst);
//printf("\n p %d\n",'p');
getchar();
return 0;
}
这段代码可以获取到password,有点长
很多都是我自己的函数库,我临时COPY出来用的
#15
头大..还要去转unicode 不过还是谢谢先~
#16
void et_str_bin2str(char *dst, const char *src, size_t char_len)
{
size_t total = 0;
size_t count = 0;
char temp_bin[20] = {0};
char temp_dec[20] = {0};
int temp_int = 0;
size_t i = 0;
total = strlen(src);
count = total/char_len;
for(i = 0; i < count; i++)
{
strncpy(temp_bin,src + i * char_len,char_len);
et_str_bin2dec(temp_dec,temp_bin);
//printf("\n %s %s\n",temp_bin,temp_dec);
dst[i] = atoi(temp_dec);
//printf("-%d-",dst[i]);
}
}
void et_str_str2bin(char *dst, const char *src, size_t char_len)
{
char temp_bin[10] = {0};
char temp_dec[10] = {0};
int temp_int = 0;
size_t src_len = strlen(src);
size_t i = 0;
dst[0] = '\0';
for(i = 0; i < src_len; i++)
{
temp_int = (unsigned int)src[i];
et_str_i2s(temp_int,temp_dec);
et_str_dec2bin(temp_bin,temp_dec);
et_str_pad(temp_bin,"0",8);
et_str_bin2dec(temp_dec,temp_bin);
strcat(dst,temp_bin);
}
}
我顺便也封装了这两个函数
转UNICODE的函数我有
#17
wchar_t *et_wcs_mbs2wcs(wchar_t *dst,const char *src)
{
int src_len = strlen(src);
mbstowcs(dst,src,src_len + 1);
dst[src_len] = '\0';
return dst;
}
char *et_wcs_wcs2mbs(char *dst,const wchar_t *src)
{
int src_len = wcslen(src);
wcstombs(dst,src,src_len * 2 + 1);
dst[src_len * 2] = '\0';
return dst;
}
#18
原理主要是用wcstombs,mbstowcs
你自己也可以去封装成适合你自己用的函数
你自己也可以去封装成适合你自己用的函数
#19
void Trn(char *S,int SL,char *O)
{
char *p=S;
for(int i=0,n=SL/8;i<n;++i){
O[i]=0;
for(int j=0;j<7;++j,p++)
O[i] |= *p - '0',O[i]<<=1;
O[i] |= *p++ - '0';}
O[SL/8]=0;
}
int main()
{
char *s1="0111000001100001011100110111001101110111011011110111001001100100";
int n = strlen(s1);
char *buf = new char[n+1];
Trn(s1,n,buf);
cout << buf;
return 0;
}
{
char *p=S;
for(int i=0,n=SL/8;i<n;++i){
O[i]=0;
for(int j=0;j<7;++j,p++)
O[i] |= *p - '0',O[i]<<=1;
O[i] |= *p++ - '0';}
O[SL/8]=0;
}
int main()
{
char *s1="0111000001100001011100110111001101110111011011110111001001100100";
int n = strlen(s1);
char *buf = new char[n+1];
Trn(s1,n,buf);
cout << buf;
return 0;
}
#20
void Trn(char *S,int SL,char *O)
{
char *p=S;
for(int i=0,n=SL/8;i<n;++i){
O[i]=0;
for(int j=0;j<7;++j,p++)
O[i] |= *p - '0',O[i]<<=1;
O[i] |= *p++ - '0';}
O[SL/8]=0;
}
int main()
{
char *s1="0111000001100001011100110111001101110111011011110111001001100100";
int n = strlen(s1);
char *buf = new char[n+1];
Trn(s1,n,buf);
cout << buf;
delete []buf;
return 0;
}
#21
右移。
强制转换。
不就可以么?
强制转换。
不就可以么?
#22
CString strText(_T("0111000001100001011100110111001101110111011011110111001001100100"));
CString strMsg(_T(""));
CString strTmp(_T(""));
while(TRUE)
{
strTmp = strText.Left(8);
BYTE b = (BYTE)_tcstoul(strTmp, NULL, 2);
strMsg += CString(b);
strText = strText.Mid(8);
if(strText.IsEmpty())
break;
}
AfxMessageBox(strMsg);
#23
错误 8 error C2440: “<function-style-cast>”: 无法从“BYTE”转换为“CString” e:\faceoline\faceonline\faceonline\faceonlinedlg.cpp 631