1

나는 안드로이드 BLE로 작업하고 있습니다.현재 시간은 32 비트 UNIX 타임 스탬프 및 시간 오프셋으로

특성에 쓰기가 필요 현재 시간은 32 비트 UNIX 타임 스탬프로 지정해야합니다. 그 후 UTC로부터의 현재 시간대 오프셋 (초)을 씁니다. 아마 문제는 32 바이트 배열로 커버하는 것이지만 나는 100 % 확실하지 않습니다.

나는 그것을했지만 뭔가 잘못되었습니다. 그것은 매우 빨리 상승하고 결국 0x7FFF, FFFF를 전달합니다. 즉, 타임 스탬프가 부호있는 정수 일 때 오버플로되고 음수가됩니다.

private byte[] getCurrentUnixTime() { 
     int unixTime = (int) (System.currentTimeMillis()/1000L); 
     byte[] currentDate = Converter.intTo32ByteArray(unixTime); 
     return currentDate; 
    } 



    private byte[] getCurrentTimeOffset() { 
     TimeZone tz = TimeZone.getDefault(); 
     Date timeNow = new Date(); 
     int offsetFromUtc = tz.getOffset(timeNow.getTime())/1000; 
     byte[] offsetFromUtcByteArray = Converter.intTo32ByteArray(offsetFromUtc); 
     return offsetFromUtcByteArray; 
    } 



public static byte[] intTo32ByteArray(int number) { 

     byte[] byteArray = new byte[]{ 
       (byte) (number >> 24), 
       (byte) (number >> 16), 
       (byte) (number >> 8), 
       (byte) number 

     }; 
     return byteArray; 
    } 

답변

0

에 내가 바이트 배열 코드 변환이 INT와 함께 문제를 해결 오랫동안 좋아하는 바이트를 변환 할 수 있습니다 바람직 값을 표시하려면

byte[] offsetFromUtcByteArray = ByteBuffer.allocate(4).order(LITTLE_ENDIAN).putInt((int) offsetFromUtc).array(); 

byte[] currentDate = ByteBuffer.allocate(4).order(LITTLE_ENDIAN).putInt((int) unixTime).array(); 
1

this 다음은 리그 스 변환을 사용 중입니다. 자바 기본적

에서

는 int 데이터 유형은 32 비트 -0x7FFFFFFF의 최소값과 0x7FFFFFFF -1- oracle 최대 값 를 갖는 2의 보수 정수를 체결한다.

그래서 프레젠테이션 (데이터가 아님)에 문제가 있습니다. ARGB를 통해 int로 repesentating하는 색상과 비슷한 경우가 있습니다 - 4 * 8 비트가 필요하므로 값은 한 번만 positvie입니다.

당신은 []이 example