/// <summary>
/// 16진수 문자열을 byte array로 변환
/// </summary>
/// <param name="HexString"></param>
/// <returns></returns>
public byte[] HexStringToByteArray(string HexString)
{
    // 0x, 0X를 제거
    if (HexString.StartsWith("0x") || HexString.StartsWith("0X")) HexString = HexString.Substring(2);

    // hex character가 아닌 문자가 포함되어 있으면 해당 character를 제거
    HexString = new string(HexString.Where(c => Uri.IsHexDigit(c)).ToArray());

    // hex string을 byte array로 변환하기
    string hexString = HexString.Replace(" ", ""); // 공백 제거
    if (hexString.Length % 2 != 0)
    {
        hexString = "0" + hexString; // hex string의 길이가 홀수이면 앞에 0을 추가
        // return null;
    }

    byte[] bytes = new byte[hexString.Length / 2]; // byte array의 크기는 hex string의 길이의 절반
    for (int i = 0; i < hexString.Length; i += 2)
    {
        bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16); // 16진수 문자열을 byte로 변환
    }

    return bytes;
}

/// <summary>
/// 2진수 문자열을 byte array로 변환
/// </summary>
/// <param name="BinaryString"></param>
/// <returns></returns>
public byte[] BinaryStringToByteArray(string BinaryString)
{
    // 0b, 0B를 제거
    if (BinaryString.StartsWith("0b") || BinaryString.StartsWith("0B")) BinaryString = BinaryString.Substring(2);

    // binary character가 아닌 문자가 포함되어 있으면 해당 character를 제거
    BinaryString = new string(BinaryString.Where(c => c == '0' || c == '1').ToArray());

    // binary string을 byte array로 변환하기
    string binaryString = BinaryString.Replace(" ", ""); // 공백 제거
    if (binaryString.Length % 8 != 0)
    {
        //binary string의 길이가 8의 배수가 아니면 8의 배수가되게 0을 추가
        binaryString = binaryString.PadLeft(binaryString.Length + (8 - binaryString.Length % 8), '0');
    }

    byte[] bytes = new byte[binaryString.Length / 8]; // byte array의 크기는 binary string의 길이의 8분의 1
    for (int i = 0; i < binaryString.Length; i += 8)
    {
        bytes[i / 8] = Convert.ToByte(binaryString.Substring(i, 8), 2); // 2진수 문자열을 byte로 변환
    }

    return bytes;
}

/// <summary>
/// 2진수(0b01), Decimal, 16진수(0x01) 문자열을 int형으로 변환
/// </summary>
/// <param name="NumberString"></param>
/// <returns></returns>
public int StringToInt32(string NumberString)
{
    if (NumberString == null) return 0;

    int result = 0;
    if (NumberString.StartsWith("0b") || NumberString.StartsWith("0B"))
    {
        byte[] bytes = BinaryStringToByteArray(NumberString); // 2진수 문자열을 byte array로 변환
        Array.Reverse(bytes); // byte array를 reverse

        if (bytes != null) result = BitConverter.ToInt32(bytes, 0); // byte array를 int로 변환
    }
    else if (NumberString.StartsWith("0x") || NumberString.StartsWith("0X"))
    {
        byte[] bytes = HexStringToByteArray(NumberString); // 16진수 문자열을 byte array로 변환
        Array.Reverse(bytes); // byte array를 reverse

        if (bytes != null) result = BitConverter.ToInt32(bytes, 0); // byte array를 int로 변환
    }
    else
    {
        //숫자를 제외한 문자열 삭제
        NumberString = new string(NumberString.Where(c => char.IsDigit(c) || c == '-').ToArray());

        //하위 10개 문자열만 제외하고 삭제
        if (NumberString.Length > 11) NumberString = NumberString.Substring(NumberString.Length - 11, 11);

        //int형을 벗어나는 값이면 최대값 또는 최소값으로 설정
        Int64 tmpNum = Convert.ToInt64(NumberString);
        if (tmpNum > int.MaxValue) result = int.MaxValue;
        else if (tmpNum < int.MinValue) result = int.MinValue;
        else result = Convert.ToInt32(NumberString);

    }

    return result;
}

'Programming > C#' 카테고리의 다른 글

텍스트 박스에 HEX만 입력 필터링  (0) 2020.12.04

0. 기본 폴더 : /home/docker/vuejs/front/

 

1. default.conf - 기본폴더/nginx/default.conf

vue.js router 사용하기 위한 설정

server {  
  listen 80;  
  listen \[::\]:80;  

  root /usr/share/nginx/html;  

  index index.html;  

  server\_name vue-router.example.com;  

  location / {  
    try\_files $uri $uri/ @rewrites;  
  }  

  location @rewrites {  
    rewrite ^(.+)$ /index.html last;  
  }  

  location ~\* \\.(?:ico|css|js|gif|jpe?g|png)$ {  
    expires max;  
    add\_header Pragma public;  
    add\_header Cache-Control "public, must-revalidate, proxy-revalidate";  
  }  
}

 

2. vue.js build

dist 배포 디렉토리가 생성됨

npm run build

 

3. docker 실행

배포 디렉토리 및 nginx 설정파일을 nginx docker 와 연결

docker run --name vuejs_server -d -p 80:80 -v /home/docker/vuejs/front/dist:/usr/share/nginx/html -v /home/docker/vuejs/front/nginx:/etc/nginx/conf.d nginx

defualt.conf - nginx 설정파일

server {

  listen 80;
  listen [::]:80;

  root /usr/share/nginx/html;

  index index.html;

  server_name vue-router.example.com;

  location / {
    try_files $uri $uri/ @rewrites;
  }

  location @rewrites {
    rewrite ^(.+)$ /index.html last;
  }

  location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires max;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
  }

}

Dockerfile - docker build 파일

#Docker file for VueJS using NGINX

\# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package\*.json ./
RUN npm install
COPY . .
RUN npm run build

\# production stage
FROM nginx:stable-alpine as production-stage
COPY \--from\=build-stage /app/dist /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY \--from\=build-stage /app/default.conf /etc/nginx/conf.d/
EXPOSE 80
CMD \["nginx", "-g", "daemon off;"\]

docker build -t vuejs .
docker run --name vuejs_server -d -p 80:80 vuejs

+ Recent posts