将字符串解析为短掩码

时间:2016-09-16 11:33:09

标签: java parsing java-io short bitmask

美好的一天。

我正在使用Tinkerforge Java API进行一些编程。

我遇到了一个问题,我要创建一个简短的掩码,看起来像:

“0b11011011”

我正在使用以下代码将我的配置解析为需要的Mask: 我使用Char数组作为修改掩码的简单方法,并将其解析为String,并使用short.parseshort创建短掩码。

    //Code Before...
    log.debug("Calculating I Mask for Port A");
    Mask = CalculateIMask(A);
    log.debug("Recieved Mask: " + Mask);
    //Applying Mask to the IOPort
    IO.setPortConfiguration('a', Mask, 'i', true);
    //...

public short CalculateIMask(List<IOPort> IOPL)
{

    char[] Mask = {'0','0','0','0','0','0','0','0'};
    for(IOPort IOP : IOPL)
    {
        if(IOP.isInput())
        {
            log.debug("Setting Pin: " + IOP.getPin() + " to 1");
            Mask[Integer.valueOf(IOP.getPin())] = '1';
        }
    }
    String SMask = String.valueOf(Mask);
    log.debug("Returning Mask: " + SMask);
    return Short.parseShort(SMask, 2);
}

日志看起来像这样。

[2016-09-16 13:06:48,252] DEBUG [IO16Register] Calculating I Mask for Port A 
[2016-09-16 13:06:48,252] DEBUG [IO16Register] Setting Pin: 0 to 1 
[2016-09-16 13:06:48,252] DEBUG [IO16Register] Setting Pin: 2 to 1 
[2016-09-16 13:06:48,252] DEBUG [IO16Register] Returning Mask: 10100000 
[2016-09-16 13:06:48,252] DEBUG [IO16Register] Recieved Mask: 160 

IO.setPortConfiguration不会抛出错误,但也不会应用我的掩码,我想它与Short.parseShort有关。

分析后的第二个日志文件也没有显示正确的掩码。

我现在正在努力解决这个问题,我也尝试使用

short[] Mask = {'0','0','0','0','0','0','0','0'};

而不是char数组。并使用简单的

(short Piece : Mask) 

将所有部分应用于一个短片,但日志显示:“48484948494848”。

我希望有人可以给我一些建议,我看了一些线索,但这些似乎没有帮助我解决我的问题。

谢谢

诚恳

Fabian95qw

//编辑:问题是由于在尝试修改设置之前缺少身份验证而导致的。

我事先这样做了,但是忘记了我没有将它应用到日志文件中吞下异常......

com.tinkerforge.TimeoutException:未及时收到函数ID -1的响应         在com.tinkerforge.DeviceBase.sendRequest(DeviceBase.java:169)         在com.tinkerforge.BrickletIO16.getIdentity(BrickletIO16.java:502)         在nucom.module.tinkerforge.bricklets.IO16.ReloadConfig(IO16.java:85)

一个问题仍然存在:Binary如何附加到Brick:

我正在生成以下内容:

二进制:== 0 0 0 0 0 0 0 0

港口号码:== 0 1 2 3 4 5 6 7

但是该计划在这个方向上附加:

二进制:== 0 0 0 0 0 0 0 0

港口号码:== 7 6 5 4 3 2 1 0

现在我只需修改代码就可以正确反转它......

//编辑:我已经完成了。

我正在使用此代码剪切来正确生成我的面具。

public short CalculateIMask(List<IOPort> IOPL)
{

    char[] Mask = {'0','0','0','0','0','0','0','0'};
    for(IOPort IOP : IOPL)
    {
        if(IOP.isInput())
        {
            log.debug("Setting Pin: " + IOP.getPin() + " to 1");

            //Old Code Piece:
            //Mask[Integer.valueOf(IOP.getPin())] = '1';

            Mask[7-Integer.valueOf(IOP.getPin())] = '1';
        }
    }
    String SMask = String.valueOf(Mask);
    log.debug("Returning Mask: " + SMask);

    return Short.parseShort(SMask, 2);
}

0 个答案:

没有答案