HEX.swift 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //
  2. // HEX.swift
  3. // Swifter
  4. //
  5. // Copyright © 2016 Damian Kołakowski. All rights reserved.
  6. //
  7. import Foundation
  8. extension Sequence where Iterator.Element == UInt8 {
  9. public func hex() -> String {
  10. return self.reduce("") { $0 + String(format: "%02x", $1) }
  11. }
  12. }
  13. extension String {
  14. public func asHexArray() -> [UInt8] {
  15. var result = [UInt8]()
  16. var iterator = self.unicodeScalars.makeIterator()
  17. while let scalar = iterator.next(), let nextScalar = iterator.next() {
  18. let value = ( (hexToDecimal(scalar)) * 16 ) + (hexToDecimal(nextScalar))
  19. if value < UInt32(UINT8_MAX) {
  20. result.append(UInt8(value))
  21. }
  22. }
  23. return result
  24. }
  25. private func hexToDecimal(_ input: UnicodeScalar) -> UInt32 {
  26. switch input {
  27. case "0"..."9":
  28. return input.value - 48
  29. case "A"..."F":
  30. return input.value - 65 + 10
  31. case "a"..."f":
  32. return input.value - 97 + 10
  33. default:
  34. return 0
  35. }
  36. }
  37. }