我一直在运行一个脚本,我使用SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(number, null, message, null, null);
Toast.makeText(getApplicationContext(), "SMS sent.", Toast.LENGTH_LONG).show();
函数,无论出于什么原因在python 2.7中,它都接受unicode字符串字符,并且输出一个整数。
在python 3.4中,情况并非如此。这是正在产生的错误输出:
ord()
当我查看两个文档时,ord函数被解释为做同样的事情。
这是我用于两个python版本的代码:
Traceback (most recent call last):
File "udpTransfer.py", line 38, in <module>
buf.append(ord(c))
TypeError: ord() expected string of length 1, but int found
任何人都可以解释为什么python3.4它表示import socket,sys, ast , os, struct
from time import ctime
import time
import csv
# creating the udo socket necessary to receive data
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip = '192.168.10.101' #i.p. of our computer
port = 20000 # socket port opened to connect from the matlab udp send data stream
server_address = (ip, port)
sock.bind(server_address) # bind socket
sock.settimeout(2) # sock configuration
sock.setblocking(1)
print('able to bind')
ii = 0
shotNummer = 0
client = ''
Array = []
byte = 8192
filename = time.strftime("%d_%m_%Y_%H-%M-%S")
filename = filename + '.csv'
try :
with open(filename,'wb') as csvfile :
spamwriter = csv.writer(csvfile, delimiter=',',quotechar='|', quoting=csv.QUOTE_MINIMAL)
# spamwriter.writerow((titles))
# as long as data comes in, well take it
while True:
data,client = sock.recvfrom(byte)
buf = []
values = []
for c in data:
# print(type(c))
buf.append(ord(c))
if len(buf) == 4 :
###
是一个整数,而不是在Python 2.7中它实际上是一个字符串,正如c
函数需要的那样?
答案 0 :(得分:7)
您在Python 3中将整数传递给ord()
。因为您在Python 3中迭代bytes
对象(第一个元素)在socket.recvfrom()
)的元组返回值中:
>>> for byte in b'abc':
... print(byte)
...
97
98
99
虽然字节文字和表示基于ASCII文本,但字节对象实际上表现为不可变的整数序列[。]
和
由于字节对象是整数序列(类似于元组),对于字节对象 b ,
b[0]
将是一个整数[...]。
在Python 2, socket.recvfrom()
中生成一个str
对象,并且对这样的对象进行迭代会产生新的单字符字符串对象,这些对象确实需要传递给ord()
才能转换为整数。
你可以在这里使用bytearray()
在Python 2和3中获得相同的整数序列:
for c in bytearray(data):
# c is now in integer in both Python 2 and 3
在这种情况下,您根本不需要使用ord()
。
答案 1 :(得分:2)
我认为不同之处在于,在Python 3中,sock.recvfrom(...)
调用返回字节,而Python 2.7 recvfrom返回字符串。所以ord
没有改变,但传递给ord的内容已经改变了。