Java'da Struct benzeri yapı kullanımı

Başlatan yamak, 02 Eylül 2015, 10:02:57

erenbasturk

#15
Alıntı yapılan: yamak - 06 Eylül 2015, 20:36:28
Soruda tuhaflık yok.C de şu yaptığımı java da nasıl yapabilirim diye soruyorum:
#include <stdio.h>
#include <string.h>
unsigned char serialData[]={'1','9','2','.','1','6','8','.','2','.','1',0,0,0,0,0,'v','o','d','a','f','o','n','e',0,0,'4','0','0','1',0};
#pragma pack(push,1)
typedef struct
{
    unsigned char ip[16];
    unsigned char apnName[10];
    unsigned char portNo[5];
}ConfigFrame;
#pragma pack(pop)
int main(void)
{
    ConfigFrame* configFrame;
    configFrame=(ConfigFrame*)serialData;
    printf("IP No:%s\n",configFrame->ip);
    printf("APN Name:%s\n",configFrame->apnName);
    printf("Port Number:%s\n",configFrame->portNo);

}

Ayrıca tüm iletişim sabit uzunlukta.Atıyorum yukardaki örneğe göre konuşursak her zaman 31 byte'lık bir data geliyo.Gelen data nın hepsini zaten alıyorum.Neden verimsizlik olsun.

Böyle birşey işine yararmı yusuf genel structure gibi erişim yapıyorsun

public class SerialData{

private static String SerialInfo = "";
private static String Ip         = "";
private static Strimg Apn        = "";
private static String Port       = "";


public synchronized void setSerialInfo(String SerialInfo)
{
    int x1,x2,x3;

    this.SerialInfo = SerialInfo;

    x1 = SerialInfo.Indexof(",");
    x2 = SerialInfo.Indexof(",",x1+1);
    x3 = SerialInfo.Length;


    Ip   = SerialInfo.substring(0,x1);
    Apn  = SerialInfo.substring(x1+1,x2);
	Port = SerialInfo.substring(x2+1,x3);
}

public synchronized String getIP()
{
		return Ip;
}

public synchronized String getApn()
{
		return Apn;
}

public synchronized String getPort()
{
		return Port;
}

}


// bu class'ı mainde çagırdında
main.java

 SerialData  = _SerialData();
 _SerialData = new SerialData();

 _SerialData.setSerialInfo = "192.168.2.1,0.0.0.0,5055";

 System.out.println(_SerialData.getIP);
 System.out.println(_SerialData.getApn);
 System.out.println(_SerialData.getPort);

yamak

Alıntı yapılan: Klein - 07 Eylül 2015, 22:37:55
struct yerine class tanımlamayı denedin mi?  Class ve struct yapıları benzeşir.  Java bilmediğim için nasıl cast edersin hiç fikrim yok.
Hocam öyle yapmayı ummuştum ama cast edilemiyormuş.
Alıntı yapılan: erenbasturk - 08 Eylül 2015, 00:17:07
Böyle birşey işine yararmı yusuf genel structure gibi erişim yapıyorsun

public class SerialData{

private static String SerialInfo = "";
private static String Ip         = "";
private static Strimg Apn        = "";
private static String Port       = "";


public synchronized void setSerialInfo(String SerialInfo)
{
    int x1,x2,x3;

    this.SerialInfo = SerialInfo;

    x1 = SerialInfo.Indexof(",");
    x2 = SerialInfo.Indexof(",",x1+1);
    x3 = SerialInfo.Length;


    Ip   = SerialInfo.substring(0,x1);
    Apn  = SerialInfo.substring(x1+1,x2);
	Port = SerialInfo.substring(x2+1,x3);
}

public synchronized String getIP()
{
		return Ip;
}

public synchronized String getApn()
{
		return Apn;
}

public synchronized String getPort()
{
		return Port;
}

}


// bu class'ı mainde çagırdında
main.java

 SerialData  = _SerialData();
 _SerialData = new SerialData();

 _SerialData.setSerialInfo = "192.168.2.1,0.0.0.0,5055";

 System.out.println(_SerialData.getIP);
 System.out.println(_SerialData.getApn);
 System.out.println(_SerialData.getPort);

Eren bu yöntem de güzel ama C/C++ daki rahatlığı vermiyo.Illaki bi delimeter kymak gerekiyo.Ben bu örneği sadece ascii karakterler için vermiştim ama frame içinde hem ascii hem int hem short vs türünde datalar olabiliyor.Yani substring fonksiyonu bu bahsettiğim frame'de düzgün çalışmayabilir.

erenbasturk

Alıntı yapılan: yamak - 08 Eylül 2015, 08:09:47
Hocam öyle yapmayı ummuştum ama cast edilemiyormuş.Eren bu yöntem de güzel ama C/C++ daki rahatlığı vermiyo.Illaki bi delimeter kymak gerekiyo.Ben bu örneği sadece ascii karakterler için vermiştim ama frame içinde hem ascii hem int hem short vs türünde datalar olabiliyor.Yani substring fonksiyonu bu bahsettiğim frame'de düzgün çalışmayabilir.

C++'da ki rahatlık yok fakat farklı türde veri tipleri oldugunda setSerialInfo'nun parametresini Byte SerialInfo olarak tanımlayıp, parametreyi byte olarak alıp daha sonra parsing işlemlerinden önce byte'ı string e çevirip gene aynı işlemleri yapabilirsin.