Je suis en train de convertir un programme C++ en Java et je me suis complètement bloqué dans la méthode suivante qui m'a bouleversé l'esprit. Auriez-vous l'amabilité d'expliquer ce que fait cette méthode?Conversion du modèle de bits C++ en 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;
}
EDIT:
Ma première version 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;
}
Est-ce que je le fais pas?
NDataString? N'est-ce pas l'objectif C? –
Vous ne voulez pas isoler un peu le problème au lieu d'afficher le code de votre entreprise en ligne? –
BTW, si cela a soufflé votre esprit parce qu'il semble compliqué et alambiqué, bon! Je ne dirais pas que c'est un bon exemple de code clair. –