java - 将 C++ 位模式转换为 Java

标签 java c++ bit

我正在将 C++ 程序转换为 Java,但完全陷入了以下让我大吃一惊的方法。您能否解释一下此方法的作用?

long TSBCA::GetSignedValue(const NDataString &value)
    {
       static NDataString s;    
       s = value;

       long multiplier(1);
       size_t len(s.Len());
       if (len != 0)
       {
          if (s[0] >= (char)0xB0 && s[0] <= (char)0xB9)
          {
             s[0] &= 0x7F; //Bit Pattern: 0111 1111
             multiplier = -1;
          }
          else if (s[len - 1] >= (char)0xB0 && s[len - 1] <= (char)0xB9)
          {
             s[len - 1] &= 0x7F; //Bit Pattern: 0111 1111
             multiplier = -1;
          }
          else
             multiplier = 1;
       }
       else
          multiplier = 1;
       return s.ToLong() * multiplier;
    }

编辑:

我的初始 Java 版本:

private long getSignedValue(final String value){

       byte[] bytes = value.getBytes();
       int length = bytes.length;
       long multiplier = 1L;

       if (bytes.length > 0){
          if (bytes[0] >= (char)0xB0 && bytes[0] <= (char)0xB9){


             bytes[0] &= 0x7F; //Bit Pattern: 0111 1111
             multiplier = -1;
          }
          else if (bytes[length - 1] >= (char)0xB0 && bytes[length - 1] <= (char)0xB9)
          {
              bytes[length - 1] &= 0x7F; //Bit Pattern: 0111 1111
             multiplier = -1;
          }
          else
             multiplier = 1;
       }
       else
          multiplier = 1;
       return Long.parseLong(Arrays.toString(bytes))* multiplier;
}

我做对了吗?

最佳答案

它采用字节字符串(即不是文本)并将其转换为长字符串。它依赖于许多特定于实现的东西,并且看起来很糟糕:它从两个不同的地方提取符号位。另一个问题是不必要的不​​可重入(由静态变量引起)。

关于java - 将 C++ 位模式转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1828968/

相关文章:

c++ - 大输入(64 位)在计算 C++ 中的 64 位整数中的位数时给出意想不到的结果

Java split() 方法最后去除空字符串?

c++ - 如何避免在 C++ 中使用 Getters/Setters?

c++ - 获取当前图像基地址

c - 旋转 C 中任何整数的位

cuda - 在 CUDA 中模拟 std::bitset

java - Maven 本地依赖

java - 如何区分 Java Futures?

java - 一对一和连接表

c++ - GL 或 GLUT 有问题