Avatar ·

كيفية تحويل مصفوفة بايتات منتهية بصفر إلى سلسلة نصية في Go؟

مرحباً بالجميع! لقد بدأت للتو في تعلم Go وواجهت مشكلة أثناء العمل مع سلاسل C النصية. أحتاج إلى قراءة بيانات من مصدر خارجي (مثل syscall أو مكتبة C عبر cgo) يعيد مصفوفة بايتات تنتهي ببايت صفري (`\0`). في Go، السلاسل النصية هي مجرد شرائح من البايتات، لكنها ليست ملزمة بأن تكون منتهية بصفر، والبايت الصفري داخل السلسلة يُعتبر حرفاً عادياً. لدي هذا الكود: ```go package main import "fmt" func main() { // مثال: مصفوفة بايتات تم الحصول عليها من دالة C data := []byte{'H', 'e', 'l', 'l', 'o', 0, 'W', 'o', 'r', 'l', 'd', 0} // تحويل بسيط إلى سلسلة نصية str := string(data) fmt.Println(str) // سيطبع "Hello" وبيانات غير مرغوب فيها؟ أم "Hello\0World"؟ } ``` المشكلة هي أنني إذا قمت ببساطة بـ `string(data)`، فستدخل جميع البايتات إلى السلسلة النصية، بما في ذلك البايتات الصفرية وكل ما بعد أول صفر. بينما أحتاج فقط إلى الحصول على الجزء حتى أول صفر (كما في C — تنتهي السلسلة عند `\0`).