Heim > Fragen und Antworten > Hauptteil
func sessionUpload(){
//上传地址
let url = NSURL(string: "http://www.zhekd.com/admin.php/Process/test")
//请求
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let session = NSURLSession.sharedSession()
//上传数据流
let adImage = qrCodeImage.image
let adImageData = UIImageJPEGRepresentation(adImage!, 0.7)
let data64String = adImageData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions())
let dataImage2 = data64String!.dataUsingEncoding(NSUTF8StringEncoding)
print(dataImage2)
let uploadTask = session.uploadTaskWithRequest(request, fromData: dataImage2) {
(data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
if error != nil{
print("发生了错误===========")
print(error?.code)
print(error?.description)
}else{
let str = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("上传完毕============")
print(str)
}
}
//使用resume方法启动任务
uploadTask.resume()
}
我上传的代码是这个样子的。这个dataImage2是十六进制的,我要怎么样才能转成二进制的给服务器。
我曾经用先转成十进制,再转成二进制的方法,但是再转成十进制的时候,就报错了,方法如下,错误原因也没有提示,就是直接奔溃了,lldb 那种。
//十六进制 => 十进制
func hex2dec(num:String) -> Int64 {
let str = num.uppercaseString
var sum:Int64 = 0
for i in str.utf8 {
let s = sum*16
let int = Int64(i)
sum = s+int-48
if i >= 65 { // A-Z 从65开始,但有初始值10,所以应该是减去55
sum -= 7
}
}
return sum
}
//十进制转二进制
func dec2bin(var number:Int64) -> String {
var str = ""
while number > 0 {
str = "\(number % 2)" + str
number /= 2
}
print(str)
return str
}
PHP中文网2017-04-17 17:40:47
这个16进制转2进制的算法看得我很吃惊。你妄想用 Int64 存下一个图片的值?怎么可能存得下??
先不论为何会有要转进制的需求,这是你跟你们后端需要商量的事…… 如果真的要转的话,一位一位地转才能存得下…… 16进制里的一位对应2进制里的4位,大学应该都学过的吧…… 0 对应 0000,F 对应 1111……