先说简单的,有一个叫strtoi()的函数
# 如果直接写> strtoi("111")
[1] 111
# 如果加base = 2,就是告诉R要换成十进制
> strtoi("111", base = 2)
[1] 7
反过来就有些麻烦,R自带intToBits()函数,但效果不好,要自己调整
> intToBits(12)[1] 00 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[25] 00 00 00 00 00 00 00 00
12换成二进制是1100,上面答案实际上是反过来读,三四位是11,其余都是0.
paste(rev(as.integer(intToBits(12))), collapse="")[1] "00000000000000000000000000001100"
如果不能解决这个问题,那么Windows Update会彻底悲剧,然后ESET就受不了了,天天给你“发光”这个问题很有可能是因为COM+ Event System服务不正常的缘故,可以通过检查注册表来确定
(注:本文所说的解决方法适用的操作系统是Windows Vista\Windows7)操作步骤:
Windows+R组合键,打开运行,输入regedit,打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,检查下面有没有Event
System项,如果没有,那么问题就找到了,是因为COM+ Event
System没有安装的缘故,那么现在你必须要启动这项服务。
操作步骤:找一台更新没有问题的电脑(Windows Vista\Windows
7),按上面步骤打开注册表编辑器,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Event
System,然后右击左边列表Event
System项,导出注册表,保存路径没有要求,命名任意,如xxx.reg,让后转到本机上。
下面需要在本机上导入注册表文件xxx.reg,双击即可运行,如果双击是记事本打开,那么需要设置打开程序regedit.exe,方法是右击xxx.reg,属性\常规\更改\浏览,在C:\Windows下搜到regedit.exe,然后点击打开,回到更改对话框,确定,回到属性对话框,确定,然后再次双击xxx.reg即可,系统会提示相应的注册表值加入到了系统注册表中,此时基本操作完成。
下面启动COM+ Event System和BITS服务,正确完成以上步骤COM+ Event
System服务已经开启,现在需要确认,并且开启BITS服务。
# include <stdio.h># include <math.h>
# define R0 2 //表示二进制
void tran(int m, int r, char str[], int *n)
{
char sb[]="0123456789ABCDEF"
int i=0,g
do{
g=m%r
str[i]=sb[g]
m=m/r
i++
}while(m!=0)
*n=i
}
void main()
{
int x
int i
int n
int bits
char a[50]
printf("输入位数bits:\n")
scanf("%d",&bits)
for(x=0x<(int)pow(R0,bits)x++)
{
tran(x,R0,a,&n)
for(i=0i<bits-ni++)
{
printf("0")
}
for(i=n-1i>=0i--)
{
printf("%c",a[i])
}
printf("\n")
}
}
或者:
# include <stdio.h>
# include <math.h>
# define R0 2 //表示二进制
void main()
{
int i
int j
int n=0
int bits
int temp
int a[20]={0}
printf("输入位数:\n")
scanf("%d",&bits)
for(i=0i<(int)pow(R0,bits)i++)
{
temp=i
for(n=0n<bitsn++)
{
a[n]=temp%2
temp=temp/2
}
for(j=bits-1j>=0j--)
{
printf("%d",a[j])
}
printf("\n")
}
}