PDA

View Full Version : وجود کد کاراکتر با کد اسکی 0 در رشته



akbar8298
جمعه 03 شهریور 1391, 22:14 عصر
سلام خدمت اساتید گرامی

یه سول داشتم که خیلی گشتم ولی پیدا نکردم. من بنا به دلایلی مجبورم توی رشته ام از کاراکتری با کد اسکی صفر استفاده کنم. یک ocx توی vb نوشتم که یه تابع رشته ای رو برام بر میگردونه که حاوی کد chr(0) هست این کد خیلی لازمه و نمی تونم چیز دیگه ای به جاش بزارم.

حالا از اون ocx تو c# استفاده کردم ولی هنگامی که اون تابه رو صدا می زنم و نتیجه رو توی یک متغیر رشته ای میزارم؛ رشته فقط تا اونجایی که کاراکتر chr(0) هست رو بر میگردونه. دلیلش رو میدونم که توی c# آخر رشته 0 یا همون \0 یا NULL قرار میگیره. ولی من به بقیه رشته هم احتیاج دارم. یه ایده اینه که توی همون ocx طول رشته رو هم بفرستم. ولی توی c# چجوری باهاش کار کنم؟

اگه راه حل دیگه ای هم هست بهم بگید. مرسی

the king
شنبه 04 شهریور 1391, 01:47 صبح
سلام خدمت اساتید گرامی

یه سول داشتم که خیلی گشتم ولی پیدا نکردم. من بنا به دلایلی مجبورم توی رشته ام از کاراکتری با کد اسکی صفر استفاده کنم. یک ocx توی vb نوشتم که یه تابع رشته ای رو برام بر میگردونه که حاوی کد chr(0) هست این کد خیلی لازمه و نمی تونم چیز دیگه ای به جاش بزارم.

حالا از اون ocx تو c# استفاده کردم ولی هنگامی که اون تابه رو صدا می زنم و نتیجه رو توی یک متغیر رشته ای میزارم؛ رشته فقط تا اونجایی که کاراکتر chr(0) هست رو بر میگردونه. دلیلش رو میدونم که توی c# آخر رشته 0 یا همون \0 یا NULL قرار میگیره. ولی من به بقیه رشته هم احتیاج دارم. یه ایده اینه که توی همون ocx طول رشته رو هم بفرستم. ولی توی c# چجوری باهاش کار کنم؟

اگه راه حل دیگه ای هم هست بهم بگید. مرسی

ساختار رشته در #C رو نمی توانید تغییر بدهید، ناچار هستید که کد ویژوال بیسیک تون رو طوری تغییر بدهید که خروجی اش آرایه ای از بایت ها باشه یعنی ()Byte تحویل بده.
فرضا اگه کد اینطوری یه :

Public Property Get Value() As String
Value = "sample" + Chr(0) + "string"
End Property


اینطوری اش کنید :

Public Property Get Value() As Byte()
Value = "sample" + Chr(0) + "string"
End Property

این کد بالا همون String رو بصورت یک آرایه ای از بایت ها (Unicode) بر می گردونه.

در #C برای تبدیل کردن اون آرایه به string چنین خواهید نوشت :

byte[] bytes = YourComponent.Value;
string s = UnicodeEncoding.Unicode.GetString(bytes);