Как справиться с порядком байтов с UInt8 в DataView?

Я столкнулся с аналогичной проблемой с модульными тестами (особенно в шутке, когда модульные тесты запускаются локально для создания моментальных снимков, а затем сервер CI запускает (потенциально) другой часовой пояс, что приводит к сбою сравнения моментальных снимков). Я издевался над нашими Date и некоторыми вспомогательными методами:

describe('...', () => {
  let originalDate;

  beforeEach(() => {
    originalDate = Date;
    Date = jest.fn(
      (d) => {
        let newD;
        if (d) {
          newD = (new originalDate(d));
        } else {
          newD = (new originalDate('2017-05-29T10:00:00z'));
        }
        newD.toLocaleString = () => {
          return (new originalDate(newD.valueOf())).toLocaleString("en-US", {timeZone: "America/New_York"});
        };
        newD.toLocaleDateString = () => {
          return (new originalDate(newD.valueOf())).toLocaleDateString("en-US", {timeZone: "America/New_York"});
        };
        newD.toLocaleTimeString = () => {
          return (new originalDate(newD.valueOf())).toLocaleTimeString("en-US", {timeZone: "America/New_York"});
        };
        return newD;
      }
    );
    Date.now = () => { return (Date()); };
  });

  afterEach(() => {
    Date = originalDate;
  });

});
1
задан maximedupre 24 February 2019 в 17:34
поделиться

1 ответ

Отдельный байт (uint8) не имеет порядка следования байтов, порядок следования байтов является свойством последовательности байтов.

В соответствии со спецификацией, которую вы связали, ChunkSize занимает место для 4 байтов - сначала младший байт (младший порядок). Если ваше значение составляет всего один байт (не больше 255), вы просто записали бы байт со смещением 4, как и раньше. Если бы 4 байта были в порядке с прямым порядком байтов, вы должны записать свой байт со смещением 7.

Однако я бы порекомендовал просто использовать setUint32 :

dataView.setUint32(0, 0x52494646, false); // RIFF
dataView.setUint32(4, 172       , true);
dataView.setUint32(8, 0x57415645, false) // WAVE
0
ответ дан Bergi 24 February 2019 в 17:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: