رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کار با انواع متغیر (حل شد)
#1
سلام . من یه سری اطلاعات به صورت کد هگز توی یه آبجکت دارم که می خوام بخونمشون. کاری که کردم به صورت زیر هست:
String data = msg.obj.toString();
byte[] data1 = data.getBytes();
اینجا msg همون اطلاعاتیه که به صورت هگز دارم. اول به صورت string  ازش خوندم اطلاعات رو بعد getbyteش کردم . این کد کار میکنه فقط وقتی مشکل پیش میاد که اون کد هگز مقدارش بیشتر از 127 باشه که دلیلشم اینه که byte بین -128 تا 127 رو ذخیره میکنه. راه حل دیگه ای دارید که مشکلم رو برطرف کنه؟
پاسخ
تشکر شده توسط:
#2
بهتره خطاها رو مدیریت کنید. برای مثال:
String data = msg.obj.toString();
byte[] data1;
try {
    data1 = data.getBytes();
} catch (Exception e) {
    Toast.makeText(this, "Invalid data", Toast.LENGTH_SHORT).show();
}
پاسخ
تشکر شده توسط: miladsss
#3
ممنون . ولی صورت مسئله پاک شد:) .احتمالا من منظورمو خوب بیان نکردم. من می خوام اون عددهای بزرگتر رو هم بخونم
پاسخ
تشکر شده توسط:
#4
خوب مشکل اینه که اعداد خارج از این محدوده اصلاً توی بازه‌ی byte نیستن. شما میخواین عددی مثل 150 رو تبدیل به byte کنید درحالی که توی این فضای یک‌بایتی جا نمیشه
پاسخ
تشکر شده توسط: miladsss
#5
هدفم این بود یه متغییر و روش دیگه معرفی کنید که توی اون متغییر ذخیره ش کنم . مهم نیست چه متغییری . من فقط می خوام اون اعداد رو داشته باشم.حتی به صورت هگزم باشه اشکال نداره . فقط از اون آبجکت بیاد بیرون. چون وقتی data رو توی یه تکست ویو نشون میدم هیچی نشون نمیده
پاسخ
تشکر شده توسط:
#6
یه نمونه از رشته‌ی ورودی و خروجی‌ای که میخواین ازش بگیرین بگذارین تا ببینم چه راه‌حلی میشه براش درنظر گرفت.
پاسخ
تشکر شده توسط: miladsss
#7
مشکل اینه که دقیقا نمیدونم اطلاعات به چه صورت توی msj ذخیره شدن . به خاطر اینکه این اطلاعات از یه ماژول سخت افزاری جدا از طریق پورت میکرو usb موبایل به گوشی منتقل میشن. این دو خط کدی که گذاشتم به صورت سعی و خطا با کلی دردسر پیدا کردم  ولی برای اعداد کوچیکتر از 127 کار میکنه و هر چند تا عدد که توی msj ذخیره شده باشن رو به صورت آرایه ای بایتی توی byte ذخیره میکنه. بعدش دنبال این گشتم که به جای بایت اونها رو به صورت int ذخیره کنم ولی چیزی پیدا نکردم . وقتی خود data رو توی تکست ویو نشون میدم فقط و فقط یه علامت سوال توی یک شکل ذوزنقه ای نشون میده به صورتی که تو لینک زیر گفته:

http://stackoverflow.com/questions/32008...ew-android
پاسخ
تشکر شده توسط:
#8
یه نمونه از دیتایی که میاد رو با Log توی پنجره‌ی LogCat نمایش بدین و بعد کپی کنید اینجا بگذارین تا ببینیم چه دیتایی دریافت میشه.
پاسخ
تشکر شده توسط:
#9
تا حالا از genymotion برای شبیه سازی کار با usb host استفاده نکردم . به نظرتون میشه همچین کاری کرد؟ یه سرچ کردم چند جا گفتن میشه ولی آموزش خوبی پیدا نکردم.
پاسخ
تشکر شده توسط:
#10
اگر هم با گوشی واقعی دیباگ کنم دیگه نمیتونم اون ماژول رو بهش وصل کنم
پاسخ
تشکر شده توسط:
#11
پلاگین WiFi ADB رو روی اندروید استودیو نصب کنید. بعد گوشی رو وصل کنین و بعد از اینکه گوشی رو شناخت، کلیدهای Ctrl+Alt+Shift+W رو بزنید تا بصورت بیسیم بهش وصل بشه (گوشی و کامپیوتر باید به یک شبکه‌ی مشترک وصل باشن). بعد از پیغام اتصال، میتونین گوشی رو جدا کنین و با WiFi برنامه رو اجرا کنین و ماژول رو به USB گوشی وصل کنین. همیشه همینکار رو با گوشی واقعی خودتون انجام بدین حتی اگه به ماژول نیاز ندارین چون اتصال مداوم به USB باعث میشه گوشی دائم در وضعیت شارژ بمونه و باتری رو در درازمدت خراب میکنه.
پاسخ
تشکر شده توسط: miladsss
#12
انجام دادم . به همون شکلی که تو texeView نشون میده تو log هم همونجوری نشون میده.


فایل‌های پیوست تصاویر بندانگشتی
   
پاسخ
تشکر شده توسط:
#13
این کد که چیزی ازش معلوم نیست. اینو امتحان کنید ببینید چی توی آرایه ذخیره میشه:
String data = msg.obj.toString();
char[] data1;
try {
    data1 = data.toCharArray();
} catch (Exception e) {
    Toast.makeText(this, "Invalid data", Toast.LENGTH_SHORT).show();
}
پاسخ
تشکر شده توسط: miladsss
#14
خب الان بخوام data1 رو نشون بدم باید به string تبدیلش کنم و بازم تبدیل میشه به همون کاراکترهای علامت سوال.
پاسخ
تشکر شده توسط:
#15
شما کدی که گذاشتم رو امتحان کردین؟
پاسخ
تشکر شده توسط: miladsss




کاربران در حال بازدید این موضوع: 4 مهمان