2016-03-02 2 views
-2

Я просто пытаюсь выяснить, как преобразовать число int в байт. Звучит просто, но для меня трудно понять, как его преобразовать.Как преобразовать int в байт?

Для например:

public byte[] getByteArray(String ipOrMac){ 

     String[] temp = new String[0]; 
     ArrayList<Integer> intList = new ArrayList<Integer>(); 

     if(ipOrMac.contains(":")){ 
      temp = ipOrMac.split(":"); // this makes temp into a new Array 
             //with splitted strings 
     } 

     if(ipOrMac.contains(".")){ 
      temp = ipOrMac.split("."); 
     } 

     for(int a = 0; a<=temp.length-1; a++){ 
      intList.add(Integer.parseInt(temp[a])); 
     } 

//  System.out.println(stringList.toArray()[0]); 
//  for(int a = 0; a<=stringList.size()-1; a++){ 
//   stringList. 
//  } 

     return null; 
    } 

Мой maintarget, чтобы получить строку вида "2: 2: 2: 2" (это MAC-адрес) в байт []. Итак, теперь у меня есть проблема, чтобы преобразовать все int в моем arraylist-integer в байты. Я не хочу использовать arraylist-byte, потому что он неэффективен ...

Значит, любые идеи?

Надеюсь, вы можете мне помочь. :)

+0

* «Я не хочу использовать rraylist-byte, потому что он неэффективен ... »* Программы замедляются, потому что они делают слишком много вещей. Если вы ничего не делаете с «списком», как миллион раз, нет оснований даже думать о микро-оптимизации, не говоря уже о разработке вашей программы вокруг нее. – Radiodef

+0

@Radiodef, cue обязательная «преждевременная оптимизация - корень всего зла». –

ответ

1

Вы можете попробовать следующий фрагмент кода:

String[] temp = ipOrMac.split(ipOrMac.contains(":") ? ":" : "\\."); 

byte[] array = new byte[temp.length]; 

for(int i = 0; i < temp.length; ++i) 
    array[i] = (byte)Integer.parseInt(temp[i]); 
+0

То же решение с меньшим количеством линий. ty – Ceeya

+0

Теперь я должен избегать отрицательных чисел. – Ceeya

+0

Это я снова. String.split (".") Не может распознать "." .... почему? – Ceeya

0

Если я правильно понимаю ... вы хотите преобразовать строку в байт [], правильно?

Вам просто нужно сделать это:

байт [] ipOrMacBytes = ipOrMac.getBytes();

+0

Это вряд ли выполнит то, что хочет OP, чтобы получить фактическое числовое значение чисел в строке. –

2

Вместо написать

byte[] bytes = new byte[temp.length]; 
    for(int a = 0; a< temp.length; a++){ 
     bytes[a] = (byte) Integer.parseInt(temp[a]); 
    } 
    return bytes; 
+0

Jap thats хорошо. Теперь я должен избегать отрицательных чисел от 0 до -127. :) Спасибо! – Ceeya

+0

@Cem очень важно понять, что нет, вы этого не делаете. Наличие этих отрицательных байтов * правильно. * –

+0

Да, но вы не можете иметь отрицательные числа в mac- или ipadresse. – Ceeya

1

Как об этом примере:

(Полный код: https://github.com/anjalshireesh/gluster-ovirt-poc/blob/master/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/jwin32/AppTest.java#L153)

try { 
     ByteBuffer bb = ByteBuffer.allocate(16); 
     bb.order(ByteOrder.LITTLE_ENDIAN); 

     String[] arrSidParts = strSid.split("-"); 
     for (int i = 4; i < arrSidParts.length; i++) { 
      bb.putInt((int) Long.parseLong(arrSidParts[i])); 
     } 

     Guid guid = new Guid(bb.array(), false); 
     out.println(guid.toString()); 

    } catch (Exception e) { 
     out.println("!" + e.getMessage() + "!"); 
     e.printStackTrace(); 
    } 
+0

ByteBuffer автоматически избегает отрицательных чисел? (От 0 до -127)? – Ceeya

Смежные вопросы