ios - 我从系统相册中上传图片到服务器,但是我的NSData是十六进制的,服务器要接受二进制的。 求问大神我怎么转?
阿神
阿神 2017-04-17 17:38:47
0
2
307
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
}


阿神
阿神

闭关修行中......

모든 응답(2)
洪涛

이런 16진수를 2진수로 변환하는 알고리즘을 보고 놀랐습니다. Int64를 사용하여 이미지 값을 저장하시겠습니까? 어떻게 구할 수 있습니까? ?

왜 16진수로 변환해야 하는지에 관계없이 이것은 당신과 당신의 백엔드에서 논의해야 할 사항입니다... 정말로 변환하고 싶다면 비트 단위로 변환하여 저장할 수 있습니다... 16진수 한 자리 in은 이진법의 4자리 숫자에 해당합니다. 대학에서 배웠어야 했는데... 0은 0000에 해당하고, F는 1111에 해당합니다...

刘奇

서버를 직접 관리하시나요? base64로 변환해서 처리를 위해 서버로 보내면 됩니다... 제가 아는 한 iOS는 바이너리를 보낼 수 있습니다... 하지만 두 당사자 간의 조정이 필요합니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿