최근 임베디드 프로젝트에는 WEB 기능이 필요했기 때문에 HTML JavaScript를 사용하여 일부 매개변수 구성 기능을 구현하려고 생각했습니다. 매개변수는 JavaScript에 의해 16진수 데이터로 생성되고 POST를 통해 마이크로 컨트롤러에 제출된 다음 직접 사용되어 컴퓨팅 성능을 최대한 활용합니다. 브라우저.
부동 소수점 숫자에 대한 JavaScript의 취약한 지원으로 인해 부동 소수점 숫자를 16진수로 변환하는 함수를 직접 사용하면 C 언어에서 일반적으로 구현되는 4바이트 저장 표현을 얻을 수 없습니다. 이 함수는 Node.js의 Buffer 클래스에서 구현할 수 있지만 사용할 방법이 없고(마이크로 컨트롤러의 저장 공간이 제한되어 있음) 구현 방법을 알 수 있는 방법도 없습니다(저는 이해할 수 없습니다).
예:
123.456 ==》 0x42F6E979 C 언어에서는 부동 소수점 숫자를 부호 없는 정수로 변환한 후 16진수로 출력하면 됩니다. JavaScript에서는 덜 간단합니다.
다행히 인터넷에서 C#으로 구현된 IEEE754 표준 부동 소수점 숫자 변환 코드(IEEE754 부동 소수점 숫자 변환기(C# 구현), 링크를 열려면 클릭)를 찾아 변환하여 이 작업을 완료했습니다. 이 코드를 JavaScript로 변환하세요. 이를 위해 코드를 게시하고 공유하세요.
그리고 16진법으로의 변환만 구현하고 C# 코드에서도 가능한 반전(역코드)은 구현하지 않았습니다.
다음 코드를 사용하여 다음을 달성할 수 있습니다.
get_float_hex(123.456) ==> 42F6E979
function DecToBinTail(dec, pad)
{
var bin = " ";
var i ;
for (i = 0; i < pad; i )
{
dec *= 2;
if (dec>= 1)
{
dec -= 1 ;
bin = "1";
}
else
{
bin = "0"; bin;
}
function DecToBinHead(dec,pad)
{
var bin="";
var i
for (i = 0; i < pad; i )
{
bin = (parseInt(dec % 2).toString()) bin
dec /= 2
}
return bin; get_float_hex(decString)
{
var dec = decString;
var sign;
var signString
var decValue = parseFloat(Math.abs(decString))
if .toString().charAt( 0) == '-')
{
sign = 1;
signString = "1"
}
else
{
sign = 0;
signString = "0";
}
if (decValue==0)
{
fraction = 0
}
else
{
var 지수 = 127;
if (decValue>=2)
{
while (decValue>=2)
{
지수 ; >decValue /= 2; }
}
else if (decValue<1)
{
while (decValue < 1)
{
지수--; 🎜>decValue *= 2;
if (지수 ==0)
break;
}
}
if (지수!=0) decValue-=1; ;
}
varfractionString = DecToBinTail(decValue, 23);
var expontString = DecToBinHead(exComponent, 8)
return Right('00000000'parseInt(signString expontStringfractionString, 2) ).toString(16), 8)