ata.go
func calculateLBA(rlba [6]uint8, is48Bit bool) int64 {
	// Pad two bytes at the end to parse as uint64
	b := []byte{
		rlba[0],
		rlba[1],
		rlba[2],
		rlba[3],
		rlba[4],
		rlba[5],
		0,
		0,
	}
	lba := binary.LittleEndian.Uint64(b)

	// Mask off high bits to limit size to either 48 bit or 28 bit,
	// depending on is48Bit's value.
	if is48Bit {
		// 48-bit
		lba &= 0x0000ffffffffffff
	} else {
		// 28-bit
		lba &= 0x0fffffff
	}

	return int64(lba)
}
func calculateLBA(rlba [6]uint8, is48Bit bool) int64 {
	// Pad two bytes at the end to parse as uint64
	b := []byte{
		rlba[0],
		rlba[1],
		rlba[2],
		rlba[3],
		rlba[4],
		rlba[5],
		0,
		0,
	}
	lba := binary.LittleEndian.Uint64(b)

	// Mask off high bits to limit size to either 48 bit or 28 bit,
	// depending on is48Bit's value.
	if is48Bit {
		// 48-bit
		lba &= 0x0000ffffffffffff
	} else {
		// 28-bit
		lba &= 0x0fffffff
	}

	return int64(lba)
}
// calculateLBA calculates a logical block address from the LBA array
// and 48-bit flags from an ATAArg.