문제

파이썬의 문자열을 서명하지 않고 서명하고 8, 16, 32 및 64 비트 int, 복식, 부유물 및 문자열과 같은 다른 유형으로 변환해야합니다.

어떻게 할 수 있습니까?

도움이 되었습니까?

해결책

문자열을 32 비트 서명 정수로 변환 할 수 있습니다. int 기능:

str = "1234"
i = int(str)  // i is a 32-bit integer

문자열이 정수를 나타내지 않으면 ValueError 예외. 그러나 문자열이 정수를 나타내지 만 정수가 32 비트 서명 된 int에 맞지 않으면 실제로 유형의 객체를 얻을 수 있습니다. long 대신에.

그런 다음 간단한 수학으로 다른 너비와 서명자로 변환 할 수 있습니다.

s8 = (i + 2**7) % 2**8 - 2**7      // convert to signed 8-bit
u8 = i % 2**8                      // convert to unsigned 8-bit
s16 = (i + 2**15) % 2**16 - 2**15  // convert to signed 16-bit
u16 = i % 2**16                    // convert to unsigned 16-bit
s32 = (i + 2**31) % 2**32 - 2**31  // convert to signed 32-bit
u32 = i % 2**32                    // convert to unsigned 32-bit
s64 = (i + 2**63) % 2**64 - 2**63  // convert to signed 64-bit
u64 = i % 2**64                    // convert to unsigned 64-bit

문자열을 플로팅 포인트로 변환 할 수 있습니다 float 기능:

f = float("3.14159")

파이썬 플로트는 다른 언어가 언급 한 것입니다 double, 즉 그들은 64 비트입니다. 파이썬에는 32 비트 플로트가 없습니다.

다른 팁

다음 유형은 대부분 파이썬에 존재하지 않습니다. 파이썬에서 문자열은 ints, longs 또는 floats로 변환됩니다. 그것이 전부이기 때문입니다.

당신은 처음에 Python과 관련이없는 전환을 요구합니다. 다음은 요청한 유형 목록과 해당 파이썬에 해당합니다.

  • 서명되지 않고 서명 된 int 8 비트, int
  • 서명되지 않고 서명 된 int 16 비트, int
  • 서명되지 않고 서명 된 int 32 비트, 부호없는 : , 서명 int
  • 서명되지 않고 서명 된 INT 64 비트,

  • 더블, 뜨다

  • 뜨다, 뜨다
  • 끈, 이것이 당신이 시작해야 할 것입니다

나는 다음이 무엇인지 모르기 때문에 파이썬 동등한 것을 모른다.

  • 서명되지 않고 서명 8 비트,
  • 서명되지 않고 16 비트,
  • 서명되지 않고 서명 된 32 비트,
  • 서명되지 않고 서명 64 비트.

당신은 이미 중요한 모든 변환이 있습니다. int(), long() 그리고 float().

파이썬에는 싱글 만 있습니다 int 유형. 문자열을 An로 변환합니다 int, 사용 int() 이와 같이:

>>> str = '123'
>>> num = int(str)
>>> num
123

편집하다: 또한 float로 변환하려면 사용하십시오 float() 똑같은 방식으로.

나는 이것이 더 많은 정보없이 반드시 잘 대답 할 수 있다고 생각하지 않습니다. 다른 사람들이 말했듯이, 파이썬에는 정수에 대해서는 int와 길이 있습니다. 언어는 하위 수준 프로그래밍 언어의 비트 넓고 서명성 원형을 준수하지 않습니다.

Python 내에서 완전히 작동하고 있다면 아마도 잘못된 질문을하고있을 것입니다. 필요한 일을하는 더 좋은 방법이있을 것입니다.

예를 들어 C 코드 또는 네트워크를 통해 상호 운용하는 경우 ~이다 이를 수행하는 방법, 그리고 이전 게시물에 대한 답이 그 길을 다루는 것처럼 보입니다.

방금 Modbus의 16 비트 서명 TWOS 보완 번호로 값이 전달 된 문제가있었습니다. 이것을 서명 된 번호로 변환해야했습니다. 나는 이것을 쓰는 것이 좋았다.

# convert a 32 bit (prob) integer as though it was 
# a 16 bit 2's complement signed one
def conv_s16(i):
    if (i & 0x8000):
        s16 = -(((~i) & 0xFFFF) + 1)
    else:
        s16 = i
    return s16
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top