기본적인 구현 방식 및 전체 구조 설명
위 영상에서 설명한 개념을 토대로 코드를 짰다.
main: 생성다항식(polyCode)과 수신데이터(data)를 입력하면 checksum을 계산한다.
binaryToInt: 이진수를 십진수로 변환
intToBinary: 십진수를 이진수로 변환
addZero: XOR연산을 위해 생성다항식에 0을 추가
extendData: 확장데이터 생성
XOR: XOR연산
verifyError : 오류검출
각 메소드 및 클래스 별 (코드) 내용 설명
import java.util.Scanner;
public class Main {
public String polyCode;
public String data ;
public String result;
public int intPolycode;
public int getIntPolycode(){
return this.intPolycode;
}
public void setIntPolycode(int intPolycode){
this.intPolycode = intPolycode;
}
public int intData;
public int getIntData(){
return this.intData;
}
public void setIntData(int intData){
this.intData = intData;
}
public String extendNum;
public static void main(String args[]) {
Main main = new Main();
Scanner in = new Scanner(System.in);
System.out.print("생성다항식을 입력하시오(input polynomial code):");
main.polyCode = in.next();
System.out.print("수신할 데이터를 입력하시오(input data):");
main.data = in.next();
main.extendData();
main.XOR();
}
public int binaryToInt(String binaryString) {
return Integer.parseInt(binaryString,2);
}
public String intToBinary(int num){
return Integer.toBinaryString(num);
}
public String addZero(String poly,int n) {
for(int i=0; i<n; i++) {
poly += "0";
}
this.setIntPolycode(this.binaryToInt(poly));
return poly;
}
public String extendData() {
int degree= this.polyCode.length()-1;
String temp = this.data+"";
for(int i=0; i<degree; i++) {
temp += "0";
}
this.extendNum = temp;
this.setIntData(this.binaryToInt(extendNum));
return extendNum;
}
public void XOR(){
this.addZero(polyCode, this.extendNum.length()-this.polyCode.length());
int temp = this.getIntData() ^ this.getIntPolycode();
while(Math.pow(2, this.polyCode.length()-1)<temp){
this.addZero(polyCode, this.intToBinary(temp).length()-this.polyCode.length());
this.setIntData(temp);
temp = this.getIntData() ^ this.getIntPolycode();
}
int degree= this.polyCode.length()-1;
String tmp = "";
for(int i=0; i<degree - intToBinary(temp).length(); i++){
tmp += "0";
}
this.result = this.data +tmp+ intToBinary(temp);
System.out.print("checksum: ");
System.out.println(result);
this.verifyError(result);
}
public void verifyError(String result){
this.addZero(polyCode, this.extendNum.length()-this.polyCode.length());
int temp = binaryToInt(result) ^ this.getIntPolycode();
while(Math.pow(2, this.polyCode.length()-1)<temp){
this.addZero(polyCode, this.intToBinary(temp).length()-this.polyCode.length());
this.setIntData(temp);
temp = this.getIntData() ^ this.getIntPolycode();
}
if(temp == 0){
System.out.println("No error");
}else{
System.out.println("error");
}
}
}
Source Code: https://github.com/kimgoat/checksum_calculator
<출처>
- 그리타GRITA, (2019.3.11.) 기술사 - 네트워크 - CRC [Youtube] 검색경로: https://www.youtube.com/watch?v=UiodRz3wsnI
'🗂️ Project Review' 카테고리의 다른 글
[React] Github Profile Finder (1) | 2024.01.11 |
---|---|
[JavaScript] 사칙 연산 퀴즈 (0) | 2023.12.26 |
[JavaScript] 줄임말 프로그램 (1) | 2023.12.25 |
[HTML&CSS] 네이버 메인 페이지 UI 일부 구현해보기 (0) | 2023.12.24 |
[Java] 연락처 관리 프로그램 (2) | 2023.12.09 |