试试先按数值的位数判断有无符号位
如:
8位数0x7F无符号位(BITAND(0x7F,0x80)!=0x80)
8位数0x81有符号位(BITAND(0x81,0x80)==0x80)
如果无符号位取原数值 0x7F
如果有符号位取 0x81 - (2^8)
? UnsignedToSigned(32767,16) ? UnsignedToSigned(32768,16) ** 无符号整数转有符号整数,nBitSize:8、16、32 FUNCTION UnsignedToSigned(nValue, nBitSize) IF !INLIST(nBitSize, 8,16,32) ERROR "无效的位数" RETURN nValue ENDIF LOCAL nMask, nSignBit nMask = IIF(nBitSize==8,0xFF, IIF(nBitSize==16,0xFFFF, IIF(nBitSize==32,0xFFFFFFFF, 0))) nSignBit = IIF(nBitSize==8,0x80, IIF(nBitSize==16,0x8000, IIF(nBitSize==32,0x80000000, 0))) IF !BETWEEN(nValue, 0,nMask) ERROR TRANSFORM(nValue)+"超出"+TRANSFORM(nBitSize)+"位无符号整数范围" RETURN nValue ENDIF nValue = BITAND(nValue, nMask) && 保留nBitSize位数值 IF BITAND(nValue, nSignBit) == nSignBit && 掩码检查符号位 RETURN nValue - (2^nBitSize) && 有符号 ENDIF RETURN nValue ENDFUNC