首页 文章

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

提问于
浏览
0

我需要将一个整数(表示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:startup failed:Script6.groovy:22:expecting'}',found','@ line 22,column 56.w byte [] {(byte)(mask&0xff), (byte)((^ org.codehaus.groovy.syntax.SyntaxException:expecting'}',found','@ line 22,column 56. at 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)at 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)at org . 在groovy.lang.GroovyClassLoad的org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:527)的codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:550)位于groovy.lang.GroovyShell.parseClass(GroovySlass.java:613)的groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:258)中的ge.doParseClass(GroovyClassLoader.java:279)位于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 . 编译(SoapUIGroovyScriptEngine.java:148)at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:93)at

我在Groovy中总共n00b,很抱歉,如果我遗漏了一些明显的东西

2 回答

  • 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方式 . 但我不相信你需要字节数组......

  • 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)];
    

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

    我希望有所帮助 .

相关问题