मेरे पास एक संरचना का एक उदाहरण है जिसे मैंने परिभाषित किया है और मैं इसे बाइट्स की सरणी में परिवर्तित करना चाहता हूं। मैंने कोशिश की [] बाइट (my_struct), लेकिन यह काम नहीं किया। इसके अलावा, मुझे binary package पर इशारा किया गया था, लेकिन मुझे यकीन नहीं है कि मुझे किस फ़ंक्शन का उपयोग करना चाहिए और मुझे इसका उपयोग कैसे करना चाहिए। एक उदाहरण की सराहना की जाएगी।जाओ, मैं एक संरचना को बाइट सरणी में कैसे परिवर्तित कर सकता हूं?
उत्तर
मुझे लगता है कि आप सी को इस तरह से संभालने की तरह कुछ चाहते हैं। ऐसा करने के लिए कोई रास्ता नहीं बनाया गया है। आपको अपनी संरचना के लिए बाइट्स से और अपने स्वयं के क्रमिकरण और deserialization को परिभाषित करना होगा। बाइनरी पैकेज आपको एन्कोड को आपके स्ट्रक्चर में फ़ील्ड बाइट्स में एन्कोड करने में मदद करेगा, जिसे आप बाइट सरणी में जोड़ सकते हैं लेकिन बाइट सरणी में लम्बाई और ऑफसेट निर्दिष्ट करने के लिए आप जिम्मेदार होंगे जो आपके स्ट्रक्चर से फ़ील्ड रखेंगे।
आपके अन्य विकल्प एन्कोडिंग पैकेजों में से एक का उपयोग करना है: http://golang.org/pkg/encoding/ जैसे गोब या जेसन।
संपादित करें:
आप एक हैश बनाने के लिए इस चाहते हैं के बाद से के रूप में आप अपनी टिप्पणी में कहते हैं कि ऐसा करने के लिए सबसे आसान तरीका है बात तो की तरह []byte(fmt.Sprintf("%v", struct))
उपयोग करते हैं: http://play.golang.org/p/yY8mSdZ_kf
आप इसे bson को serializing माना जाता है? http://labix.org/gobson
आप एक स्ट्रिंग के बजाय एक बाइट बफर का उपयोग करना चाहिए, अन्य सुझाव दिया तरीकों चर लंबाई की एक SHA1 बनाने के लिए, SHA1 मानक लंबाई 20 बाइट (160 बिट)
package main
import (
"crypto/sha1"
"fmt"
"encoding/binary"
"bytes"
)
type myStruct struct {
ID string
Data string
}
func main() {
var bin_buf bytes.Buffer
x := myStruct{"1", "Hello"}
binary.Write(&bin_buf, binary.BigEndian, x)
fmt.Printf("% x", sha1.Sum(bin_buf.Bytes()))
}
होना चाहिए यह अपने आप का प्रयास करें: http://play.golang.org/p/8YuM6VIlLV
यह वास्तव में एक आसान तरीका है और यह बहुत अच्छा काम करता है।
लिंक-केवल उत्तर ही बहिष्कृत हैं। –
धन्यवाद डर, मैं इसे संपादित करूंगा। मेरी पहली टिप्पणी थी। –
इस काम की तरह दिखता नहीं है क्योंकि 'myStruct' निश्चित आकार नहीं है। https: //play.golang।संगठन/पी/IGA_lgRVNX –
एक संभावित समाधान "encoding/gob"
मानक पैकेज है। गोब पैकेज एक एन्कोडर/डिकोडर बनाता है जो बाइट्स की सरणी में किसी भी स्ट्रक्चर को एन्कोड कर सकता है और उसके बाद उस सरणी को स्ट्रक्चर में डीकोड कर सकता है। एक महान पोस्ट है, here।
जैसा कि अन्य ने इंगित किया है, इस तरह के पैकेज का उपयोग करना आवश्यक है क्योंकि उनके प्रकृति से structs अज्ञात आकार हैं और बाइट्स के सरणी में परिवर्तित नहीं किए जा सकते हैं।
मैंने कुछ कोड और play शामिल किया है।
package main
import (
"bytes"
"encoding/gob"
"fmt"
"log"
)
type P struct {
X, Y, Z int
Name string
}
type Q struct {
X, Y *int32
Name string
}
func main() {
// Initialize the encoder and decoder. Normally enc and dec would be
// bound to network connections and the encoder and decoder would
// run in different processes.
var network bytes.Buffer // Stand-in for a network connection
enc := gob.NewEncoder(&network) // Will write to network.
dec := gob.NewDecoder(&network) // Will read from network.
// Encode (send) the value.
err := enc.Encode(P{3, 4, 5, "Pythagoras"})
if err != nil {
log.Fatal("encode error:", err)
}
// HERE ARE YOUR BYTES!!!!
fmt.Println(network.Bytes())
// Decode (receive) the value.
var q Q
err = dec.Decode(&q)
if err != nil {
log.Fatal("decode error:", err)
}
fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)
}
- 1. जावा में, मैं एक इनपुटस्ट्रीम को बाइट सरणी (बाइट []) में कैसे परिवर्तित कर सकता हूं?
- 2. जाओ: संरचना को [] बाइट में कैसे परिवर्तित करें?
- 3. मैं एक 4-बाइट सरणी को एक पूर्णांक में कैसे परिवर्तित कर सकता हूं?
- 4. मैं एक बाइट सरणी को डबल और बैक में कैसे परिवर्तित कर सकता हूं?
- 5. मैं संरचना में सरणी कैसे घोषित कर सकता हूं?
- 6. एक बाइट सरणी को एक संरचना
- 7. मैं बाइट की सरणी कैसे पिन कर सकता हूं?
- 8. मैं फ़ाइल नामों की एक सूची को पेड़ संरचना में कैसे परिवर्तित कर सकता हूं?
- 9. मैं NSMutableArray को NSString में कैसे परिवर्तित कर सकता हूं?
- 10. मैं बाइट सरणी के पहले "एन" तत्व कैसे ले सकता हूं और उन्हें सीधे स्ट्रिंग में परिवर्तित कर सकता हूं?
- 11. मैं जावा बाइट सरणी को स्कैला बाइट सरणी में कैसे परिवर्तित करूं?
- 12. ArrayList को संरचना की एक सरणी में कैसे परिवर्तित करें?
- 13. मैं निर्दिष्ट बाइट सीमा पर एक संरचना को कैसे संरेखित कर सकता हूं?
- 14. मैं एक सरणी को टुपल में कैसे परिवर्तित कर सकता हूं?
- 15. बिट्स को बाइट्स में कैसे परिवर्तित कर सकता हूं?
- 16. क्या मैं एक बाइट सरणी ले सकता हूं और इसे एक संरचना में deserialize कर सकते हैं?
- 17. मैं एनएसडीएटा को एनएसएआरएआरए में कैसे परिवर्तित कर सकता हूं?
- 18. मैं html.slim को html.erb में कैसे परिवर्तित कर सकता हूं?
- 19. मैं फ़ाइलपैथ को फ़ाइल में कैसे परिवर्तित कर सकता हूं?
- 20. मैं FBProfilePictureView को UIImage में कैसे परिवर्तित कर सकता हूं?
- 21. मैं HTML को वस्त्र में कैसे परिवर्तित कर सकता हूं?
- 22. जावा में बाइट सरणी में छवि को कैसे परिवर्तित करें?
- 23. मैं 'System.Windows.Input.Key' को 'System.Windows.Forms.Keys' में कैसे परिवर्तित कर सकता हूं?
- 24. बाइट सरणी को छवि फ़ाइल में कैसे परिवर्तित करें?
- 25. सी # मैं System.Net.ConnectStream को एक बाइट [] (सरणी)
- 26. मैं हाइव एसक्यूएल में सरणी को स्ट्रिंग में कैसे परिवर्तित कर सकता हूं?
- 27. मैं एक असम्पीडित इनपुटस्ट्रीम को एक gzip'ed इनपुट स्ट्रीम में कुशलतापूर्वक कैसे परिवर्तित कर सकता हूं?
- 28. जाओ: सरणी में तारों को पूर्णांक में परिवर्तित करें
- 29. एंड्रॉइड: बाइट सरणी को बिटमैप में कैसे परिवर्तित करें?
- 30. मैं पर्ल में एक सरणी कैसे छोटा कर सकता हूं?
आपके त्वरित उत्तर के लिए धन्यवाद। कारण मैं ऐसा करने की कोशिश कर रहा हूं वह हैश (मैं SHA-256 का उपयोग करने की कोशिश कर रहा हूं, लेकिन यह मेरी संरचना का दूसरा हो सकता है) प्राप्त करने में सक्षम होना है। क्या आप ऐसा करने का एक आसान तरीका जानते हैं? – abw333
मैंने जो कुछ भी आप चाहते हैं उसे करने का एक आसान तरीका दिखाने के लिए मैंने जवाब संपादित किया है। –
फिर से धन्यवाद। मैंने ऐसा करने का प्रयास किया, लेकिन मुझे निम्न त्रुटि संदेश मिला: "एकल-मान संदर्भ में एकाधिक-मान fmt.Printf()"। क्या आप जानते हैं कि ऐसा क्यों हो रहा है? – abw333