我需要将一个整数(表示x.509 KeyUsage掩码)转换为布尔数组,在Java中我有以下可用的函数,它工作正常:
public boolean[] getKeyUsage()
{
int mask = 144; // Integer.parseInt(testRunner.testCase.getPropertyValue("keyUsage"));
byte[] bytes = new byte[] { (byte)(mask & 0xff), (byte)((mask & 0xff00) >> 8) };
boolean[] keyUsage = new boolean[9];
for (int i = 0; i != 9; i++)
{
keyUsage[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
}
return keyUsage;
}
在这种情况下(144),它应该返回
keyUsage = {boolean [9] @ 976} [0] = true [1] = false [2] = false [3] = true [4] = false [5] = false [6] = false [7] = false [8] = false
在Groovy中运行时,我得到了
org.codehaus.groovy.control.MultipleCompilationErrorsException: 启动失败:Script6.groovy:22:期待'}',找到','@ line 22,列56.w byte [] {(byte)(mask& 0xff),(byte)((^ org.codehaus.groovy.syntax.SyntaxException:期待'}',找到','@ 第22行,第56栏 org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:140) 在 org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:108) 在org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:236) 在 org.codehaus.groovy.control.CompilationUnit $ 1.call(CompilationUnit.java:162) 在 org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:912) 在 org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:574) 在 org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:550) 在 org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:527) 在 groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:279) 在 groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:258) 在groovy.lang.GroovyShell.parseClass(GroovyShell.java:613)at at groovy.lang.GroovyShell.parse(GroovyShell.java:625)at groovy.lang.GroovyShell.parse(GroovyShell.java:652)at groovy.lang.GroovyShell.parse(GroovyShell.java:643)at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.compile(SoapUIGroovyScriptEngine.java:148) 在 com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:93) 在
我在Groovy中总计n00b,很抱歉,如果我遗漏了一些明显的东西
答案 0 :(得分:2)
我认为这会得到你需要的结果:
boolean[] getKeyUsage( int mask ) {
(7..0).collect { int it ->
( ( mask >> it ) & 1 )
}
}
getKeyUsage( 144 ) == [ true, false, false, true, false, false, false, false ]
您得到的错误是因为您使用以下命令在Groovy中构造数组:
byte[] bytes = [ 1, 2 ]
不是new byte[] { 1, 2 }
Java方式。但我不相信你需要字节数组...
答案 1 :(得分:2)
在Groovy中,以下内容无效:
int mask = 144;
byte[] bytes = new byte[] { (byte)(mask & 0xff), (byte)((mask & 0xff00) >> 8) };
以下内容有效:
int mask = 144;
byte[] bytes = [(byte)(mask & 0xff), (byte)((mask & 0xff00) >> 8)];
如果您愿意,可以删除演员阵容:
int mask = 144;
byte[] bytes = [(mask & 0xff), ((mask & 0xff00) >> 8)];
如果您愿意,也可以删除分号。
我希望有所帮助。