비트 조작 및 Go Newbie here : D 이동 (Go)을 사용하여 센서에서 일부 데이터를 읽고 2 바이트로 얻습니다. 예를 들어 0xFFFE
이라고합시다. Go에서 우리는 단지 uint16(0xFFFE)
을 수행 할 수 있기 때문에 uint16에 캐스트하기가 쉽지만 센서가 -32768에서 32767까지 범위의 사실 값을 반환하기 때문에 정수로 변환해야합니다. 이제 "Go go 이게 좋을까요? 내가 할 경우 int16(0xFFFE)
그것은 내가 원하는 것을 이해할 것입니까? ", 아니요. 나는 다음과 같은 솔루션을 사용하여 종료 (I는 웹에서 일부 파이썬 코드 번역) : 작동하는 것 같다이동에서 uint16에서 int16으로 캐스팅하기위한 적절한 방법
x := 0xFFFE
if (x & (1 << 15)) != 0 {
x = x - (1<<16)
}
을하지만 A) 나는 내가 상상 한 것과 추한 약간 모양) 완전히 이유를 확인하고, B 아니다 uint16을 int16으로 캐스팅하는 간단한 솔루션이어야합니다. 누구든지 나에게 손을 뻗어 이것이 왜 이렇게 할 수있는 유일한 이유인지 명확히 할 수 있을까? 아니면 다른 가능한 방법이 있습니까?
사소한 nitpick : 이동 타입 캐스팅을하지 않는다; 오히려 유형 변환이 있습니다. – kostix