PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

आर में int16/uint16 में PostgreSQL बाइटिया कॉलम हेक्स को डीकोड कैसे करें?

आप इस रूपांतरण फ़ंक्शन से शुरू कर सकते हैं, एक तेज़ strsplit . को प्रतिस्थापित कर सकते हैं और readBin . का उपयोग करें परिणाम पर:

byteArray <- "\\xffff00000100020003000400050006000700080009000a00"

## Split a long string into a a vector of character pairs
Rcpp::cppFunction( code = '
CharacterVector strsplit2(const std::string& hex) {
  unsigned int length = hex.length()/2;
  CharacterVector res(length);
  for (unsigned int i = 0; i < length; ++i) {
    res(i) = hex.substr(2*i, 2);
  }
  return res;
}')

## A function to convert one string to an array of raw
f <- function(x)  {
  ## Split a long string into a a vector of character pairs
  x <- strsplit2(x)
  ## Remove the first element, "\\x"
  x <- x[-1]
  ## Complete the conversion
  as.raw(as.hexmode(x))
}

raw <- f(byteArray)
# int16
readBin(con = raw,
        what = "integer",
        n = length(raw) / 2,
        size = 2,
        signed = TRUE,
        endian = "little")
# -1  0  1  2  3  4  5  6  7  8  9 10

# uint16
readBin(con = raw,
        what = "integer",
        n = length(raw) / 2,
        size = 2,
        signed = FALSE,
        endian = "little")
# 65535     0     1     2     3     4     5     6     7     8     9    10

# int32
readBin(con = raw,
        what = "integer",
        n = length(raw) / 4,
        size = 4,
        signed = TRUE,
        endian = "little")
# 65535 131073 262147 393221 524295 655369

यह uint32 के लिए काम नहीं करेगा और (u)int64 , हालांकि, चूंकि R int32 . का उपयोग करता है आंतरिक रूप से। हालाँकि, R numerics का भी उपयोग कर सकता है 2^52 से नीचे के पूर्णांकों को संग्रहीत करने के लिए। तो हम इसका उपयोग कर सकते हैं:

# uint32
byteArray <- "\\xffffffff0100020003000400050006000700080009000a00"
int32 <- readBin(con = f(byteArray),
                 what = "integer",
                 n = length(raw) / 4,
                 size = 4,
                 signed = TRUE,
                 endian = "little")

ifelse(int32 < 0, int32 + 2^32, int32)
# 4294967295     131073     262147     393221     524295     655369

और gzip . के लिए संपीड़ित डेटा:

# gzip
byteArray <- "\\x1f8b080000000000000005c1870100200800209a56faffbd41d30dd3b285e37a52f9d033018818000000"
con <- gzcon(rawConnection(f(byteArray)))
readBin(con = con,
        what = "integer",
        n = length(raw) / 2,
        size = 2,
        signed = TRUE,
        endian = "little")
close(con = con)

चूंकि यह एक वास्तविक कनेक्शन है, इसलिए हमें इसे बंद करना सुनिश्चित करना होगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जावा के साथ डेटाबेस श्रोता कैसे बनाएं?

  2. त्रुटि:केवल पढ़ने योग्य उपयोगकर्ता के रूप में चयन करने का प्रयास करते समय पोस्टग्रेज़ पर संबंध टैबलेटनाम के लिए अनुमति अस्वीकार कर दी गई

  3. कैसे देखें कि कौन सा पोस्टग्रेज संस्करण चल रहा है

  4. डालने पर त्रुटि पोस्ट करता है - त्रुटि:UTF8 एन्कोडिंग के लिए अमान्य बाइट अनुक्रम:0x00

  5. PostgreSQL में एक तारीख में महीने जोड़ें