if (null == sn &&0 == sn.trim().length())
throw new IllegalArgumentException("接收的参数 “" + sn + "” 不是十六进制表示形式!")
final String P = "0x"
if (sn.toLowerCase().startsWith(P)) {
final String regex = "[^\\da-fA-F]"
int i = Regexutils.matcheRegexp(sn.substring(2), regex, false)
if (0 != i)
throw new IllegalArgumentException("接收的参数 “" + sn
+ "” 不是十六进制表示形式!")
else {
char[] cs = sn.substring(2).toUpperCase().toCharArray()
char c
for (int j = 0j <cs.lengthj++) {
c = cs[j]
i += toDec(c, (cs.length - j - 1))
}
return i
}
}
return 0
}
private static int toDec(char c, int i) {
final double N = 16.0
int n = getNum(c)
int r = (int) (n * Math.pow(N, (double) i))
return r
}
private static int getNum(char c) {
// 字符F转换成为数字为70
if ((int) c >70)
return 0
int i = 0
switch (c) {
case ''A'':
i = 10
break
case ''B'':
i = 11
break
case ''C'':
i = 12
break
case ''D'':
i = 13
break
case ''E'':
i = 14
break
case ''F'':
i = 15
break
case ''a'':
i = 10
break
case ''b'':
i = 11
break
case ''c'':
i = 12
break
case ''d'':
i = 13
break
case ''e'':
i = 14
break
case ''f'':
i = 15
break
}
if (0 == i) {
// 字符0转换成为数字为48
return (int) c - 48
} else
return i
}
Scanner console =new Scanner(System.in)System.out.print("输入一个16进制的RGB颜色:")
String strRGB = console.next()
int RGB = Integer.valueOf(strRGB, 16)
System.out.println(RGB)
你要是输入的数不是十六进制的就会错哈,我这儿没有加验证之类的...
读取后,两个字符转一次二进制字符串然后生成一个二进制的字符串,一次取24位字符 ,然后取第13个字符到第16个字符强转为十六进制的字符串 然后+第1个至第8个字符强转为十六进制的字符串 组成信号0的数字,写到文件或者别的地方,信号1同理可转.感觉有点低端,不知可有别的精妙做法欢迎分享,转载请注明来源:内存溢出
评论列表(0条)