swift POS8583报文组装工具
2015-12-16 18:01
357 查看
最近两天在学习Swift,想着把OC里边的8583POS工具转成Swift版本。
今天做了几个转换工具
1、data转换为十六进制字符串
2、十六进制字符串转换为 data
3、十六进制字符串转为ASC码
4、ASC码转为十六进制字符串
代码如下
//
// StringPosUtilTransExtension.swift
// SwiftPOS
//
// Created by 刘通超 on 15/12/16.
// Copyright © 2015年刘通超. All rights reserved.
//
import Foundation
extension String{
//MARK: data
转换为十六进制字符串
/**
data 转换为十六进制字符串
<24211D34 98FF62AF> --> "24211D3498FF62AF"
- parameter data:
要转换的data
- returns:
转换后的字符串
*/
static func hexStringFromData(data data:NSData)->String{
let dataLength = data.length
let buffer =
UnsafePointer<UInt8>(data.bytes)
var result =
""
for(var i=0;i<dataLength;i++){
let num =
Int(buffer[i]&0xff)
result += decIntToHexString(decNum: num)
}
return result
}
//MARK:
十六 进制字符串转换为 data
/**
十六
进制字符串转换为 data
"24211D3498FF62AF" --> <24211D34 98FF62AF>
- parameter hexStr:
要转换的字符串
- returns:
转换后的data数据
*/
static func dataFromHexString(hexStr hexStr:String)->NSData{
let strLength = hexStr.utf16.count
let data =
NSMutableData()
for(var index=0; index+2<=strLength; index+=2){
let subStr = hexStr.substringWithRange(Range(start: hexStr.startIndex.advancedBy(index),
end: hexStr.startIndex.advancedBy(index+2)))
let dataInt =
UnsafeMutablePointer<UInt32>.alloc(1)
NSScanner.init(string: subStr).scanHexInt(dataInt)
data.appendBytes(dataInt, length:
1)
}
return data
}
//MARK: hex字符串转为ASC码 00 --> 3030
/**
hex字符串转为ASC码 00 --> 3030
- parameter hexString: hex字符串
- returns:
转码后的ASC字符串
*/
static func ascStringFromHexString(hexString:String)->String{
var result =
""
let length = hexString.utf16.count
let buffer = hexString.cStringUsingEncoding(NSUTF8StringEncoding)
for(var i=0;i<length;i++){
result += decIntToHexString(decNum:Int(buffer![i]))
}
return result
}
//MARK: ASC码转为Hex字符串 3030 --> 00
/**
ASC码转为Hex字符串 3030 --> 00
- parameter ascStr: ASC字符串
- returns:
转码后的Hex字符串
*/
static func hexStringFromAscString(ascStr ascStr:String)->String{
let dda =
String.dataFromHexString(hexStr: ascStr)
let result =
String.init(data: dda, encoding:
NSUTF8StringEncoding)
return result!
}
/**
UInt8 十进制数转为十六进制字符串(两位)
- parameter num:
十进制数字
- returns: 两位十六进制字符串
*/
private staticfunc decIntToHexString(decNum num:Int)->String{
let temp =
String(format: "%0x", arguments: [num])
let result = (temp.utf16.count <=1) ?"0"+temp: temp;
return result
}
}
亲测可用
let strToData =String.dataFromHexString(hexStr:"3132332e34353678")
let dataToStr = String.hexStringFromData(data: strToData)
let ascToHex = String.hexStringFromAscString(ascStr: dataToStr)
let hexToAsc = String.ascStringFromHexString(ascToHex)
print("strToData:\(strToData)")
print("dataToStr:\(dataToStr)")
print("hexToAsc:\(hexToAsc)")
print("ascToHex:\(ascToHex)")
运行结果为:
strToData:<3132332e 34353678>
dataToStr:3132332e34353678
hexToAsc:3132332e34353678
ascToHex:123.456x
如有问题请及时沟通 —— LC
今天做了几个转换工具
1、data转换为十六进制字符串
2、十六进制字符串转换为 data
3、十六进制字符串转为ASC码
4、ASC码转为十六进制字符串
代码如下
//
// StringPosUtilTransExtension.swift
// SwiftPOS
//
// Created by 刘通超 on 15/12/16.
// Copyright © 2015年刘通超. All rights reserved.
//
import Foundation
extension String{
//MARK: data
转换为十六进制字符串
/**
data 转换为十六进制字符串
<24211D34 98FF62AF> --> "24211D3498FF62AF"
- parameter data:
要转换的data
- returns:
转换后的字符串
*/
static func hexStringFromData(data data:NSData)->String{
let dataLength = data.length
let buffer =
UnsafePointer<UInt8>(data.bytes)
var result =
""
for(var i=0;i<dataLength;i++){
let num =
Int(buffer[i]&0xff)
result += decIntToHexString(decNum: num)
}
return result
}
//MARK:
十六 进制字符串转换为 data
/**
十六
进制字符串转换为 data
"24211D3498FF62AF" --> <24211D34 98FF62AF>
- parameter hexStr:
要转换的字符串
- returns:
转换后的data数据
*/
static func dataFromHexString(hexStr hexStr:String)->NSData{
let strLength = hexStr.utf16.count
let data =
NSMutableData()
for(var index=0; index+2<=strLength; index+=2){
let subStr = hexStr.substringWithRange(Range(start: hexStr.startIndex.advancedBy(index),
end: hexStr.startIndex.advancedBy(index+2)))
let dataInt =
UnsafeMutablePointer<UInt32>.alloc(1)
NSScanner.init(string: subStr).scanHexInt(dataInt)
data.appendBytes(dataInt, length:
1)
}
return data
}
//MARK: hex字符串转为ASC码 00 --> 3030
/**
hex字符串转为ASC码 00 --> 3030
- parameter hexString: hex字符串
- returns:
转码后的ASC字符串
*/
static func ascStringFromHexString(hexString:String)->String{
var result =
""
let length = hexString.utf16.count
let buffer = hexString.cStringUsingEncoding(NSUTF8StringEncoding)
for(var i=0;i<length;i++){
result += decIntToHexString(decNum:Int(buffer![i]))
}
return result
}
//MARK: ASC码转为Hex字符串 3030 --> 00
/**
ASC码转为Hex字符串 3030 --> 00
- parameter ascStr: ASC字符串
- returns:
转码后的Hex字符串
*/
static func hexStringFromAscString(ascStr ascStr:String)->String{
let dda =
String.dataFromHexString(hexStr: ascStr)
let result =
String.init(data: dda, encoding:
NSUTF8StringEncoding)
return result!
}
/**
UInt8 十进制数转为十六进制字符串(两位)
- parameter num:
十进制数字
- returns: 两位十六进制字符串
*/
private staticfunc decIntToHexString(decNum num:Int)->String{
let temp =
String(format: "%0x", arguments: [num])
let result = (temp.utf16.count <=1) ?"0"+temp: temp;
return result
}
}
亲测可用
let strToData =String.dataFromHexString(hexStr:"3132332e34353678")
let dataToStr = String.hexStringFromData(data: strToData)
let ascToHex = String.hexStringFromAscString(ascStr: dataToStr)
let hexToAsc = String.ascStringFromHexString(ascToHex)
print("strToData:\(strToData)")
print("dataToStr:\(dataToStr)")
print("hexToAsc:\(hexToAsc)")
print("ascToHex:\(ascToHex)")
运行结果为:
strToData:<3132332e 34353678>
dataToStr:3132332e34353678
hexToAsc:3132332e34353678
ascToHex:123.456x
如有问题请及时沟通 —— LC
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
- php Hex RGB颜色值互换的使用
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift编程中的泛型解析
- Swift中定义二维数组的方法及遍历方法示例
- javascript实现十六进制颜色值(HEX)和RGB格式相互转换
- 简单分析Swift语言的一些基本特征
- Swift与C语言指针结合使用实例
- Swift心得笔记之控制流
- 用Swift构建一个简单的iOS邮件应用的方法
- 苹果公司推出的新编程语言Swift简介和入门教程
- 探讨Swift数组和字典
- Swift中的指针操作和使用详细介绍
- Swift中使用正则表达式的一些方法
- Swift心得笔记之运算符
- Swift中使用可选类型完美解决占位问题
- Swift学习笔记之构造器重载