Mega Code Archive

 
Categories / Android / Hardware
 

Utility class providing array to intlong conversion for data received from devices through adb

/*  * Copyright (C) 2007 The Android Open Source Project  *  * Licensed under the Apache License, Version 2.0 (the "License");  * you may not use this file except in compliance with the License.  * You may obtain a copy of the License at  *  *      http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */ //package com.android.ddmlib.utils; /**  * Utility class providing array to int/long conversion for data received from devices through adb.   */ public final class ArrayHelper {     /**      * Swaps an unsigned value around, and puts the result in an array that can be sent to a device.      * @param value The value to swap.      * @param dest the destination array      * @param offset the offset in the array where to put the swapped value.      *      Array length must be at least offset + 4      */     public static void swap32bitsToArray(int value, byte[] dest, int offset) {         dest[offset] = (byte)(value & 0x000000FF);         dest[offset + 1] = (byte)((value & 0x0000FF00) >> 8);         dest[offset + 2] = (byte)((value & 0x00FF0000) >> 16);         dest[offset + 3] = (byte)((value & 0xFF000000) >> 24);     }     /**      * Reads a signed 32 bit integer from an array coming from a device.      * @param value the array containing the int      * @param offset the offset in the array at which the int starts      * @return the integer read from the array      */     public static int swap32bitFromArray(byte[] value, int offset) {         int v = 0;         v |= ((int)value[offset]) & 0x000000FF;         v |= (((int)value[offset + 1]) & 0x000000FF) << 8;         v |= (((int)value[offset + 2]) & 0x000000FF) << 16;         v |= (((int)value[offset + 3]) & 0x000000FF) << 24;         return v;     }          /**      * Reads an unsigned 16 bit integer from an array coming from a device,      * and returns it as an 'int'      * @param value the array containing the 16 bit int (2 byte).      * @param offset the offset in the array at which the int starts      *      Array length must be at least offset + 2      * @return the integer read from the array.      */     public static int swapU16bitFromArray(byte[] value, int offset) {         int v = 0;         v |= ((int)value[offset]) & 0x000000FF;         v |= (((int)value[offset + 1]) & 0x000000FF) << 8;         return v;     }          /**      * Reads a signed 64 bit integer from an array coming from a device.      * @param value the array containing the int      * @param offset the offset in the array at which the int starts      *      Array length must be at least offset + 8      * @return the integer read from the array      */     public static long swap64bitFromArray(byte[] value, int offset) {         long v = 0;         v |= ((long)value[offset]) & 0x00000000000000FFL;         v |= (((long)value[offset + 1]) & 0x00000000000000FFL) << 8;         v |= (((long)value[offset + 2]) & 0x00000000000000FFL) << 16;         v |= (((long)value[offset + 3]) & 0x00000000000000FFL) << 24;         v |= (((long)value[offset + 4]) & 0x00000000000000FFL) << 32;         v |= (((long)value[offset + 5]) & 0x00000000000000FFL) << 40;         v |= (((long)value[offset + 6]) & 0x00000000000000FFL) << 48;         v |= (((long)value[offset + 7]) & 0x00000000000000FFL) << 56;         return v;     } }