Skip to content

Instantly share code, notes, and snippets.

@massimilianochiodi
Created April 15, 2022 08:31
Show Gist options
  • Save massimilianochiodi/735e649d4071f395f311856047be44f0 to your computer and use it in GitHub Desktop.
Save massimilianochiodi/735e649d4071f395f311856047be44f0 to your computer and use it in GitHub Desktop.
Reduce Latitude and Longitude bytes for adverstise in ble - java
byte[] dammidatibyteridotti(double lat, double lon, double pre) {
byte[] ritorno;
String _latitudine = String.format(Locale.ENGLISH,"%.5f", lat);
if(_latitudine.length() < 8) { _latitudine = "0" + _latitudine; }
String _longitudine = String.format(Locale.ENGLISH,"%.5f", lon);
if(_longitudine.length() < 8) { _longitudine = "0" + _longitudine; }
String _precisione = String.format(Locale.ENGLISH, "%d", (int) pre);
// calcolo i byte dalla latitudine
int[] latint = new int[8];
char[] singoloelemento_latitudine = _latitudine.toCharArray();
// primo byte
latint[0] = Character.getNumericValue(singoloelemento_latitudine[0]);
latint[1] = Character.getNumericValue(singoloelemento_latitudine[1]);
byte a_primo = (byte) (latint[0] * 10 + latint[1]);
latint[2] = 1;
latint[3] = Character.getNumericValue(singoloelemento_latitudine[3]);
byte a_secondo = (byte) (latint[2] * 10 + latint[3]);
latint[4] = Character.getNumericValue(singoloelemento_latitudine[4]);
latint[5] = Character.getNumericValue(singoloelemento_latitudine[5]);
byte a_terzo = (byte) (latint[4] * 10 + latint[5]);
latint[6] = Character.getNumericValue(singoloelemento_latitudine[6]);
latint[7] = Character.getNumericValue(singoloelemento_latitudine[7]);
byte a_quarto = (byte) (latint[6] * 10 + latint[7]);
byte[] latitudinebyte = {a_primo, a_secondo, a_terzo, a_quarto};
// calcolo i byte dalla logintudine
int[] lonint = new int[8];
char[] singoloelemento_longitudine = _longitudine.toCharArray();
// primo byte
lonint[0] = Character.getNumericValue(singoloelemento_longitudine[0]);
lonint[1] = Character.getNumericValue(singoloelemento_longitudine[1]);
byte b_primo = (byte) (lonint[0] * 10 + lonint[1]);
lonint[2] = 1;
lonint[3] = Character.getNumericValue(singoloelemento_longitudine[3]);
byte b_secondo = (byte) (lonint[2] * 10 + lonint[3]);
lonint[4] = Character.getNumericValue(singoloelemento_longitudine[4]);
lonint[5] = Character.getNumericValue(singoloelemento_longitudine[5]);
byte b_terzo = (byte) (lonint[4] * 10 + lonint[5]);
lonint[6] = Character.getNumericValue(singoloelemento_longitudine[6]);
lonint[7] = Character.getNumericValue(singoloelemento_longitudine[7]);
byte b_quarto = (byte) (lonint[6] * 10 + lonint[7]);
byte[] longitudinebyte = {b_primo, b_secondo, b_terzo, b_quarto};
byte[] precisione = { (byte) Integer.parseInt(_precisione)};
ritorno = concat(latitudinebyte,longitudinebyte,precisione);
return ritorno;
}
String[] espandibyteridotti(byte[] elementi) {
final int RADIX = 10;
String[] valori = new String[3];
// primobyte latitudine byte 1-4
char[] char_latitudine = new char[8];
char_latitudine[0] = Character.forDigit((int) elementi[0] / 10, RADIX);
char_latitudine[1] = Character.forDigit((int) elementi[0] % 10, RADIX);
char_latitudine[2] = ".".charAt(0);
char_latitudine[3] = Character.forDigit((int) elementi[1] % 10, RADIX);
char_latitudine[4] = Character.forDigit((int) elementi[2] / 10, RADIX);
char_latitudine[5] = Character.forDigit((int) elementi[2] % 10, RADIX);
char_latitudine[6] = Character.forDigit((int) elementi[3] / 10, RADIX);
char_latitudine[7] = Character.forDigit((int) elementi[3] % 10, RADIX);
valori[0] = String.valueOf(char_latitudine);
char[] char_longitudine = new char[8];
char_longitudine[0] = Character.forDigit((int) elementi[4] / 10, RADIX);
char_longitudine[1] = Character.forDigit((int) elementi[4] % 10, RADIX);
char_longitudine[2] = ".".charAt(0);
char_longitudine[3] = Character.forDigit((int) elementi[5] % 10, RADIX);
char_longitudine[4] = Character.forDigit((int) elementi[6] / 10, RADIX);
char_longitudine[5] = Character.forDigit((int) elementi[6] % 10, RADIX);
char_longitudine[6] = Character.forDigit((int) elementi[7] / 10, RADIX);
char_longitudine[7] = Character.forDigit((int) elementi[7] % 10, RADIX);
valori[1] = String.valueOf(char_longitudine);
valori[2] = String.valueOf ((int) elementi[8]);
return valori;
}
@massimilianochiodi
Copy link
Author

in reality this code can be simplified by taking the data (double) as a string in groups of two digits at a time and transforming them into bytes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment