티스토리 뷰

보통 게임서버는 값을 편리하게 저장하기위해 바이너리값들을 쓰는 경향이 있다.


그런데 웹에서는 바이너리값은 궂이 처리 하지 않는 편인데


지금까지는 핸들링하지 않다가, 누군가의 요구로 인해 바이너리값을 씹고 뜯고 맛보고 즐기게 되었다.


가져오는 쿼리는 아래와 같다.


DECLARE @stat nvarchar(max);

          DECLARE @legend int;

          SELECT @stat = CONVERT(nvarchar(max), stat_data_list, 2), @legend = legend_opt_cid

          FROM *

          WHERE db_id =:dbid;

          SELECT stat = @stat, legend = @legend;


이렇게 가져온건 nvarchar가 된다.


      $binary = base_convert( $this->getLittleEndian( substr( $sub[0]['stat'], $i*8, 8) ), 16, 10 );


base_convert로 16진수를 10진수로 바꿔준다.

그리고 우리 서버개발자는 리틀엔디안으로 만들었기떄문에 그걸 뒤집어준다.


public function getLittleEndian($str){

    debug("GETLITTLEENDIAN");

    debug($str);

    $result = "";

    $result .= substr($str, 6, 2);

    $result .= substr($str, 4, 2);

    $result .= substr($str, 2, 2);

    $result .= substr($str, 0, 2);

    debug($result);

    debug("GETLITTLEENDIAN");

    return $result;

  }


그러하다.


반대로 바이너리 값을 만들어야 하는 순간도 있었다.

아이템을 생성하는데 Stat을 직접 입력해야 하는 것. 그래서 이런걸 만들었다.


for($i=0;$i<9;$i++){

      if($type[$i]!=-1){

        $bstring .= $this->getLittleEndian(sprintf("%08X", $type[$i]));

        $bstring .= $this->getLittleEndian(sprintf("%08X", $val[$i]));

      }

    }


맨첨에는 걍 숫자로 입력을 받아서 이걸 8글자 16진수로 바꿔주고 그걸 LittleENdian으로 바꿔준다.


DECLARE @stat varbinary(128) = CONVERT(varbinary(128), :stat_data_list, 1) ;

        DECLARE @custom varbinary(128) = CONVERT(varbinary(128), :customizing_data_list, 1) ;

        DECLARE @trade varbinary(128) = CONVERT(varbinary(128), :trading_able_player_list, 1) ;


        EXEC ***********

***********

** @custom,*

**********

**************

          @stat,**********

******



그걸 요래요래 SP에다 넣어주면 된다


SP명은 가린다.


여튼 요래요래 아이템을 직접 Binary값을 넣어서 만들 수 있다.

'IT > WebB' 카테고리의 다른 글

MSSQL SP내용 쿼리로 보기  (0) 2015.12.16
JS Object / Array add Item  (0) 2015.12.10
MSSQL 바이너리 -> 가져와서 파싱하기  (0) 2015.12.08
RequireJS  (0) 2015.12.08
JQuery Plugin - Context Div  (0) 2014.05.29
Closure가 무엇인가  (0) 2014.05.29
댓글
댓글쓰기 폼