在Groovy中将整数转换为布尔数组

时间:2014-04-25 13:17:41

标签: java groovy type-conversion x509certificate

我需要将一个整数(表示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,很抱歉,如果我遗漏了一些明显的东西

2 个答案:

答案 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)];

如果您愿意,也可以删除分号。

我希望有所帮助。