如何把字符串1234567890123456789012345678901234567890转化成2进制数

如何把字符串1234567890123456789012345678901234567890转化成2进制数,第1张

提供个思路和算法,请自己动手实现,这样对你有好处:
1、将字符串转成整数数组储存(假设Source),共40个元素(Source[0] 到 Source[39]),每个元素中保存1位;再定义1个数组用来保存转化后的二进制数(假设为Result);
2、转化2进制的算法:开始,判断:
21 如果数组Source末位元素 Source[39] , 如果为偶数,则输出1位二进制数为 0 ,如果为奇数,则输出1位 二进制数 1;
22 从 Source 数组 首元素开始依次往后,除以2并将结果仍保存在Source数组,注意可能存在借位的情况(比如第一次循环 Source[0]=1,Source[1]=2 ,则除以2以后结果为 Source[0]=0,Source[1]= 6;)
23 循环21、23 直到Source 数组所有的元素变成0;
3、将步骤2中输出的二进制数逆序输出,即可得到转化后的二进制数。

#include<stdioh>
void dec2bin(int n)
{if(n>1)dec2bin(n/2);
 printf("%d",n%2);
}
int main()
{char n[15];
 int i,x;
 scanf("%s",n);
 for(i=x=0;n[i];i++)
   x=x10+n[i]-'0';
 dec2bin(x);
 return 0;
}

1、在VB中没有一种所谓的“真正的二进制”,只有long、integer、byte这样的整数。
2、VB中不支持二进制字符串。只支持16进制字符串,需要在前面加前缀"&H"。
比如:CLng("&HFFFF")
3、如果你想将"1010011101"这样的二进制字符串转换为数值,需要自己写一个函数。
下面是我给你写的一个:
Function BinaryValue(ByVal strBin As String) As Long
Dim lngOutValue As Long
Dim bytBytes() As Byte
Dim bytAscii(0 To 255) As Byte
Dim lngBytes_Start As Long
Dim lngBytes_Length As Long
Dim lngBytes_Index As Long
bytAscii(49) = 1
bytBytes() = StrConv(strBin, vbFromUnicode)
lngBytes_Length = UBound(bytBytes)
If lngBytes_Length > 30 Then lngBytes_Start = lngBytes_Length - 30
For lngBytes_Index = lngBytes_Start To lngBytes_Length
lngOutValue = lngOutValue + bytAscii(bytBytes(lngBytes_Index)) 2 ^ (lngBytes_Length - lngBytes_Index)
Next
BinaryValue = lngOutValue
End Function
BinaryValue函数可以将31位以下的二进制字符串转换为Long类型整数。
比如下面的用法:
MsgBox (BinaryValue("1111111111111111111111111111110"))
4、如果你想获取一个整数的二进制位可以使用下面的函数:
Function BinaryBit(ByVal lngValue As Long, ByVal lngIndex As Long) As Long
BinaryBit = (lngValue \ 2 ^ lngIndex) Mod 2
End Function
lngValue是long类型数值;
lngIndex是二进制位,从0开始计算,最大值是30。第0位是二进制最右边的那个位。
比如5的二进制是"101"
MsgBox BinaryBit(5, 0) 返回1
MsgBox BinaryBit(5, 1) 返回0
MsgBox BinaryBit(5, 2) 返回1
下面演示如何获取&HFF(255)的二进制字符串。
Dim i As Long
Dim s As String
For i = 0 To 30
s = BinaryBit(&HFF, i) & s
Next
MsgBox s

一个简单的例子:
string str = "你好好呀,北京天安门!";
//把字符串转化为byte二进制数组
byte[] bt = SystemTextEncodingUTF8GetBytes(str);
foreach (byte item in bt)
{
ConsoleWriteLine(item);
}
//把二进制byte数组转化位字符串
string new_str = SystemTextEncodingUTF8GetString(bt);
ConsoleWriteLine(new_str);
这就是一个简单转化,当然啦,复杂转化的原理也是一样的。
还有就是好多人以为加密和解密 *** 作很难,其实,通过字符串与二进制数组之间的转化就可以实现加密的 *** 作啦,这个大家就自己研究下吧。我给大家提个思路,就是把字符串转化为二进制数组后,对每个二进制数据进行相应的加减运算,比如,让每个二进制数据进行加一 *** 作,解密时当然就是进行把每个二进制数据进行减一就可以啦,然后再把二进制数组转化为字符串,就可以恢复到原来的数据啦。

流可以分为两种类型:文本流和二进制流。文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“\n”,(如果以"文本"方式打开一个文件,那么在读字符的时候,系统会把所有的"\r\n"序列转成"\n",在写入时把"\n"转成"\r\n" archim 's opinion )。二进制流是非解释性的,一次处理一个字符,并且不转换字符。
通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器

创建函数

create FUNCTION [dbo][Dec2Bin](@Dec INT, @StrLen INT)
RETURNS VARCHAR(31) -- INT型,4字节,正数转为二进制字符串最多31位
AS
BEGIN
    DECLARE @BinStr AS VARCHAR(31)      -- 二进制表示的字符串
    DECLARE @Div2 AS INT                -- 商
    DECLARE @Mod2 AS INT                -- 模/余数
    IF @Dec < 0
        RETURN 'NULL'              -- 不支持负数的转换
    SET @Div2 = @Dec / 2 
    SET @Mod2 = @Dec % 2 
    SET @BinStr = ''
    WHILE @Div2 <> 0
    BEGIN
        SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr
        SET @Dec = @Dec / 2
        SET @Div2 = @Dec / 2
        SET @Mod2 = @Dec % 2
   
    END;
    SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr -- 至此,已完成十进制到二进制的转换
    IF @StrLen > LEN(@BinStr)    -- 如果用户指定的长度大于实际长度,则需要左边补0
        BEGIN
            IF @StrLen > 31    -- 返回的长度,最长为32
                SET @StrLen = 31
   
            DECLARE @ZeroStr VARCHAR(31)    -- 需要补充的"0000"
            DECLARE @OffsetLen TINYINT       -- 需要补充几个"0"
            SET @ZeroStr = ''
            SET @OffsetLen = @StrLen - LEN(@BinStr)
   
            WHILE  @OffsetLen > 0
            BEGIN
                SET @ZeroStr = @ZeroStr + '0'
                SET @OffsetLen = @OffsetLen - 1
            END
   
            SET @BinStr = @ZeroStr + @BinStr
        END
    RETURN @BinStr
END

调用函数

select [dbo][Dec2Bin](3,8)

其中3是要转换的数字,8是最后二进制的长度,不足位的前补0


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13126971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-05
下一篇 2023-06-05

发表评论

登录后才能评论

评论列表(0条)

保存