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 }
服务器归自个儿管么? 你转成base64丢给服务器处理试试…据我了解貌似iOS可以发二进制…不过双方协调吧
这个16进制转2进制的算法看得我很吃惊。你妄想用 Int64 存下一个图片的值?怎么可能存得下??
先不论为何会有要转进制的需求,这是你跟你们后端需要商量的事…… 如果真的要转的话,一位一位地转才能存得下…… 16进制里的一位对应2进制里的4位,大学应该都学过的吧…… 0 对应 0000,F 对应 1111……