10 진수가있는 행렬이 있고이 코드를 사용하여 이진수로 변환 할 수 있다는 것을 알고 있습니다. (IEEE 754 배정 밀도 이진)
m = reshape(dec2bin(typecast(b(:),'uint8'),8).',1,[]);
b_recovered = reshape(typecast(uint8(bin2dec(reshape(m,8,[]).')),'double'),size(b));
이 코드를 사용하면 마지막 8 비트가 가장 중요한 비트라고 생각합니다. 생성 된 난수로 대체 한 후 마지막 8 비트가 변경되지 않으므로 임의의 십진수를 생성하고 이러한 요소를 대체하고 싶습니다. 마지막 8 비트를 유지하면서 새 번호가 필요합니다.
예를 들면 :
b=-1.12;
m=1110110001010001101110000001111010000101111010111111000110111111;
대체 될 :
m=0000110000000000001110000000011010000001100010000010000110111111;
다음과 같습니다.
b=-1.337678432804527e-04
두 숫자 사이에 임의의 십진수를 생성 할 수 있다는 것을 알고 있지만 위에서 언급 한 문제를 해결하는 방법을 잘 모르겠습니다.
mymatrix(1:q,:)= value2 + (value2-value1).*rand(q,size(y_blk,2));
처음 56 개가 마지막 8 개를 대체하도록 유지
0
와 사이의 정수를 생성하고 255
이진수로 변환합니다. 시퀀스의 첫 번째 / 마지막 8 비트를 교체합니다.
b=-1.12;
m = reshape(dec2bin(typecast(b(:),'uint8'),8).',1,[]);
m_small = [dec2bin(randi(256)-1,8), m(9:end)]
m_large = [m(1:end-8),dec2bin(randi(256)-1,8)]
b_small = reshape(typecast(uint8(bin2dec(reshape(m_small,8,[]).')),'double'),size(b));
b_large = reshape(typecast(uint8(bin2dec(reshape(m_large,8,[]).')),'double'),size(b));
의 값은 b_small
거의 변하지 않아 처음 8 비트가 최하위임을 나타냅니다. b_large
변화는 방대하므로 마지막 8 개가 가장 중요한 비트입니다.
마지막 8 개를 처음 56 개 대신 유지
마지막 8 비트를 유지하고 나머지는 교체하려는 질문을 오해했습니다. 이 경우 56 비트 임의 데이터를 생성하고 저장 한 마지막 8 개를 추가합니다. 이제 Matlab은 최대 int를 생성 할 수 있습니다 2^53
. 까지 하나의 정수를 생성하는 대신 2^56
각각이 2^8
인 7을 생성 하고 연결하십시오.
m_new = [reshape(dec2bin(randi(2^8,[7,1])-1,8),[1,56]), m(end-7:end)]
b_new = reshape(typecast(uint8(bin2dec(reshape(m_new,8,[]).')),'double'),size(b));
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다